qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH V4 2/7] block: make bdrv_open_common more ready to b


From: Devin Nakamura
Subject: [Qemu-devel] [PATCH V4 2/7] block: make bdrv_open_common more ready to be called by bdrv_open_conversion_target
Date: Tue, 23 Aug 2011 00:27:38 -0400

Signed-off-by: Devin Nakamura <address@hidden>
---
 block.c |   18 ++++++++++++------
 1 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/block.c b/block.c
index a8a013a..ac5a103 100644
--- a/block.c
+++ b/block.c
@@ -441,14 +441,17 @@ static int refresh_total_sectors(BlockDriverState *bs, 
int64_t hint)
  * Common part for opening disk images and files
  */
 static int bdrv_open_common(BlockDriverState *bs, const char *filename,
-    int flags, BlockDriver *drv)
+    int flags, BlockDriver *drv, BlockConversionOptions *drv_options,
+    QEMUOptionParameter *usr_options, bool force)
 {
     int ret, open_flags;
 
     assert(drv != NULL);
 
-    bs->file = NULL;
-    bs->total_sectors = 0;
+    if (~flags & BDRV_O_CONVERSION) {
+        bs->file = NULL;
+        bs->total_sectors = 0;
+    }
     bs->encrypted = 0;
     bs->valid_key = 0;
     bs->open_flags = flags;
@@ -481,7 +484,10 @@ static int bdrv_open_common(BlockDriverState *bs, const 
char *filename,
     }
 
     /* Open the image, either directly or using a protocol */
-    if (drv->bdrv_file_open) {
+    if (flags & BDRV_O_CONVERSION) {
+        ret = drv->bdrv_open_conversion_target(bs, drv_options, usr_options,
+                                               force);
+    } else if (drv->bdrv_file_open) {
         ret = drv->bdrv_file_open(bs, filename, open_flags);
     } else {
         ret = bdrv_file_open(&bs->file, filename, open_flags);
@@ -534,7 +540,7 @@ int bdrv_file_open(BlockDriverState **pbs, const char 
*filename, int flags)
     }
 
     bs = bdrv_new("");
-    ret = bdrv_open_common(bs, filename, flags, drv);
+    ret = bdrv_open_common(bs, filename, flags, drv, NULL, NULL, false);
     if (ret < 0) {
         bdrv_delete(bs);
         return ret;
@@ -618,7 +624,7 @@ int bdrv_open(BlockDriverState *bs, const char *filename, 
int flags,
     }
 
     /* Open the image */
-    ret = bdrv_open_common(bs, filename, flags, drv);
+    ret = bdrv_open_common(bs, filename, flags, drv, NULL, NULL, false);
     if (ret < 0) {
         goto unlink_and_fail;
     }
-- 
1.7.6.rc1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]