qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH v5 11/22] block: Allow block devices without fil


From: Max Reitz
Subject: Re: [Qemu-devel] [PATCH v5 11/22] block: Allow block devices without files
Date: Sat, 14 Dec 2013 01:10:13 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.1.1

On 13.12.2013 21:06, Kevin Wolf wrote:
Am 13.12.2013 um 18:10 hat Max Reitz geschrieben:
blkdebug and blkverify will, in order to retain compatibility, not
support the field "file" implicitly through bdrv_open(). In order to be
able to use those drivers without giving a filename anyway, it is
necessary to be able to have block devices without files implicitly
opened by bdrv_open(). This is the case, if there was neither a file
name, a reference to an existing block device to use as a file nor
options specific to the file.

Signed-off-by: Max Reitz <address@hidden>
---
  block.c | 15 +++++++++------
  1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/block.c b/block.c
index bef4f82..9659eb5 100644
--- a/block.c
+++ b/block.c
@@ -1145,11 +1145,14 @@ int bdrv_open(BlockDriverState *bs, const char 
*filename, QDict *options,
      qdict_extract_subqdict(options, &file_options, "file.");
      file_reference = qdict_get_try_str(options, "file");
- ret = bdrv_file_open(&file, filename, file_reference, file_options,
-                         bdrv_open_flags(bs, flags | BDRV_O_UNMAP), 
&local_err);
-    qdict_del(options, "file");
-    if (ret < 0) {
-        goto fail;
+    if (filename || file_reference || qdict_size(file_options)) {
+        ret = bdrv_file_open(&file, filename, file_reference, file_options,
+                             bdrv_open_flags(bs, flags | BDRV_O_UNMAP),
+                             &local_err);
+        qdict_del(options, "file");
+        if (ret < 0) {
+            goto fail;
+        }
      }
/* Find the right image format driver */
@@ -1178,7 +1181,7 @@ int bdrv_open(BlockDriverState *bs, const char *filename, 
QDict *options,
Manually adding more context before the next hunk:

     if (!drv) {
         ret = find_image_format(file, filename, &drv, &local_err);
     }
We can get file == NULL now, which will cause a segfault in
find_image_format. (For a reproducer of the segfault, try
'x86_64-softmmu/qemu-system-x86_64 -drive foo=bar')

Right, thanks.

Max



reply via email to

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