Patchwork block: Probe file for specified format

login
register
mail settings
Submitter Stefan Weil
Date Dec. 15, 2012, 11:35 a.m.
Message ID <1355571343-19878-1-git-send-email-sw@weilnetz.de>
Download mbox | patch
Permalink /patch/206613/
State Superseded
Headers show

Comments

Stefan Weil - Dec. 15, 2012, 11:35 a.m.
Probe for the file format if the file format was specified explicitly
and a probe function is available.

example: -drive file=myfile,format=qcow2

Then myfile is probed and must be in qcow2 format.

This fixes those bugs:

https://bugzilla.redhat.com/show_bug.cgi?id=556482
https://bugs.launchpad.net/qemu/+bug/1090600

Signed-off-by: Stefan Weil <sw@weilnetz.de>
---

This patch can also be used for the latest stable version of QEMU.

 blockdev.c |    7 +++++++
 1 file changed, 7 insertions(+)
Stefan Weil - Dec. 15, 2012, 11:57 a.m.
Am 15.12.2012 12:35, schrieb Stefan Weil:
> Probe for the file format if the file format was specified explicitly
> and a probe function is available.
>
> example: -drive file=myfile,format=qcow2
>
> Then myfile is probed and must be in qcow2 format.
>
> This fixes those bugs:
>
> https://bugzilla.redhat.com/show_bug.cgi?id=556482
> https://bugs.launchpad.net/qemu/+bug/1090600
>
> Signed-off-by: Stefan Weil <sw@weilnetz.de>
> ---
>
> This patch can also be used for the latest stable version of QEMU.
>
>   blockdev.c |    7 +++++++
>   1 file changed, 7 insertions(+)
>
> diff --git a/blockdev.c b/blockdev.c
> index 9a05e57..5a4cd56 100644
> --- a/blockdev.c
> +++ b/blockdev.c
> @@ -411,6 +411,13 @@ DriveInfo *drive_init(QemuOpts *opts, BlockInterfaceType block_default_type)
>               error_report("'%s' invalid format", buf);
>               return NULL;
>           }
> +        if (file && drv->bdrv_probe) {
> +            uint8_t data[2048];
> +            if (drv->bdrv_probe(data, sizeof(data), file) == 0) {
> +                error_report("file '%s' not in '%s' format", file, buf);
> +                return NULL;
> +            }
> +        }
>       }
>   
>       /* disk I/O throttling */


Sorry, this patch was not tested enough. I'll send a v2.

- Stefan Weil

Patch

diff --git a/blockdev.c b/blockdev.c
index 9a05e57..5a4cd56 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -411,6 +411,13 @@  DriveInfo *drive_init(QemuOpts *opts, BlockInterfaceType block_default_type)
             error_report("'%s' invalid format", buf);
             return NULL;
         }
+        if (file && drv->bdrv_probe) {
+            uint8_t data[2048];
+            if (drv->bdrv_probe(data, sizeof(data), file) == 0) {
+                error_report("file '%s' not in '%s' format", file, buf);
+                return NULL;
+            }
+        }
     }
 
     /* disk I/O throttling */