Patchwork [15/15] block: Allow overriding backing.file.filename

login
register
mail settings
Submitter Kevin Wolf
Date April 12, 2013, 8:48 p.m.
Message ID <1365799688-19918-16-git-send-email-kwolf@redhat.com>
Download mbox | patch
Permalink /patch/236201/
State New
Headers show

Comments

Kevin Wolf - April 12, 2013, 8:48 p.m.
If a filename is passed in the driver-specific options from the command
line, the backing file path from the image is ignored now.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
 block.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
Eric Blake - April 15, 2013, 9:03 p.m.
On 04/12/2013 02:48 PM, Kevin Wolf wrote:
> If a filename is passed in the driver-specific options from the command
> line, the backing file path from the image is ignored now.
> 
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> ---
>  block.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/block.c b/block.c
> index c2d1d2d..3a45c2a 100644
> --- a/block.c
> +++ b/block.c
> @@ -889,7 +889,9 @@ int bdrv_open_backing_file(BlockDriverState *bs, QDict *options)
>      }
>  
>      bs->open_flags &= ~BDRV_O_NO_BACKING;
> -    if (bs->backing_file[0] == '\0' && qdict_size(options) == 0) {
> +    if (qdict_haskey(options, "file.filename")) {
> +        backing_filename[0] = '\0';
> +    } else if (bs->backing_file[0] == '\0' && qdict_size(options) == 0) {

Of course, the user can abuse this at their peril, but the flexibility
it adds (being able to pass in a /dev/fdset to let the command line
specify an open fd as backing file even when open() is forbidden on NFS)
is just AWESOME!

Looking forward to a QMP counterpart; I'll definitely review that, as
libvirt is still reluctant to use fdsets for image manipulation on the
command line if we can't follow it up with hot-plug manipulation, but I
love where this is heading.

Reviewed-by: Eric Blake <eblake@redhat.com>

Patch

diff --git a/block.c b/block.c
index c2d1d2d..3a45c2a 100644
--- a/block.c
+++ b/block.c
@@ -889,7 +889,9 @@  int bdrv_open_backing_file(BlockDriverState *bs, QDict *options)
     }
 
     bs->open_flags &= ~BDRV_O_NO_BACKING;
-    if (bs->backing_file[0] == '\0' && qdict_size(options) == 0) {
+    if (qdict_haskey(options, "file.filename")) {
+        backing_filename[0] = '\0';
+    } else if (bs->backing_file[0] == '\0' && qdict_size(options) == 0) {
         QDECREF(options);
         return 0;
     }