qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] vmdk: remove wrong calculation of relative path
@ 2013-06-26  9:24 Fam Zheng
  2013-06-26 15:05 ` Kevin Wolf
  0 siblings, 1 reply; 4+ messages in thread
From: Fam Zheng @ 2013-06-26  9:24 UTC (permalink / raw)
  To: qemu-devel; +Cc: kwolf, Fam Zheng, stefanha

When creating image with backing file, the driver tries to calculate the
relative path from created image file to backing file, but the path
computation is incorrect. e.g.:

    $ qemu-img create -f vmdk -b vmdk-data-disk.vmdk vmdk-data-snapshot1
    Formatting 'vmdk-data-snapshot1', fmt=vmdk size=10737418240
    backing_file='vmdk-data-disk.vmdk' compat6=off zeroed_grain=off

    $ qemu-img info vmdk-data-snapshot1
    image: vmdk-data-snapshot1
    file format: vmdk
    virtual size: 10G (10737418240 bytes)
    disk size: 12K
->  backing file: disk.vmdk

The common part in file names, "vmdk-data-", is incorrectly forgotten by
relative_path(). As the VMDK specification has no restriction on
parentNameHint to be relative path, we simply remove this by using the
backing_file option.

Signed-off-by: Fam Zheng <famz@redhat.com>
---
 block/vmdk.c | 44 +-------------------------------------------
 1 file changed, 1 insertion(+), 43 deletions(-)

diff --git a/block/vmdk.c b/block/vmdk.c
index 975e1d4..a28fb5e 100644
--- a/block/vmdk.c
+++ b/block/vmdk.c
@@ -1487,45 +1487,6 @@ static int filename_decompose(const char *filename, char *path, char *prefix,
     return VMDK_OK;
 }
 
-static int relative_path(char *dest, int dest_size,
-        const char *base, const char *target)
-{
-    int i = 0;
-    int n = 0;
-    const char *p, *q;
-#ifdef _WIN32
-    const char *sep = "\\";
-#else
-    const char *sep = "/";
-#endif
-
-    if (!(dest && base && target)) {
-        return VMDK_ERROR;
-    }
-    if (path_is_absolute(target)) {
-        pstrcpy(dest, dest_size, target);
-        return VMDK_OK;
-    }
-    while (base[i] == target[i]) {
-        i++;
-    }
-    p = &base[i];
-    q = &target[i];
-    while (*p) {
-        if (*p == *sep) {
-            n++;
-        }
-        p++;
-    }
-    dest[0] = '\0';
-    for (; n; n--) {
-        pstrcat(dest, dest_size, "..");
-        pstrcat(dest, dest_size, sep);
-    }
-    pstrcat(dest, dest_size, q);
-    return VMDK_OK;
-}
-
 static int vmdk_create(const char *filename, QEMUOptionParameter *options)
 {
     int fd, idx = 0;
@@ -1625,7 +1586,6 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options)
         return -ENOTSUP;
     }
     if (backing_file) {
-        char parent_filename[PATH_MAX];
         BlockDriverState *bs = bdrv_new("");
         ret = bdrv_open(bs, backing_file, NULL, 0, NULL);
         if (ret != 0) {
@@ -1638,10 +1598,8 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options)
         }
         parent_cid = vmdk_read_cid(bs, 0);
         bdrv_delete(bs);
-        relative_path(parent_filename, sizeof(parent_filename),
-                      filename, backing_file);
         snprintf(parent_desc_line, sizeof(parent_desc_line),
-                "parentFileNameHint=\"%s\"", parent_filename);
+                "parentFileNameHint=\"%s\"", backing_file);
     }
 
     /* Create extents */
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [Qemu-devel] [PATCH] vmdk: remove wrong calculation of relative path
  2013-06-26  9:24 [Qemu-devel] [PATCH] vmdk: remove wrong calculation of relative path Fam Zheng
@ 2013-06-26 15:05 ` Kevin Wolf
  2013-06-27  7:09   ` Paolo Bonzini
  0 siblings, 1 reply; 4+ messages in thread
From: Kevin Wolf @ 2013-06-26 15:05 UTC (permalink / raw)
  To: Fam Zheng; +Cc: qemu-devel, stefanha

Am 26.06.2013 um 11:24 hat Fam Zheng geschrieben:
> When creating image with backing file, the driver tries to calculate the
> relative path from created image file to backing file, but the path
> computation is incorrect. e.g.:
> 
>     $ qemu-img create -f vmdk -b vmdk-data-disk.vmdk vmdk-data-snapshot1
>     Formatting 'vmdk-data-snapshot1', fmt=vmdk size=10737418240
>     backing_file='vmdk-data-disk.vmdk' compat6=off zeroed_grain=off
> 
>     $ qemu-img info vmdk-data-snapshot1
>     image: vmdk-data-snapshot1
>     file format: vmdk
>     virtual size: 10G (10737418240 bytes)
>     disk size: 12K
> ->  backing file: disk.vmdk
> 
> The common part in file names, "vmdk-data-", is incorrectly forgotten by
> relative_path(). As the VMDK specification has no restriction on
> parentNameHint to be relative path, we simply remove this by using the
> backing_file option.
> 
> Signed-off-by: Fam Zheng <famz@redhat.com>

Nice one. Thanks, applied to the block branch.

Kevin

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [Qemu-devel] [PATCH] vmdk: remove wrong calculation of relative path
  2013-06-26 15:05 ` Kevin Wolf
@ 2013-06-27  7:09   ` Paolo Bonzini
  2013-06-27  7:55     ` Kevin Wolf
  0 siblings, 1 reply; 4+ messages in thread
From: Paolo Bonzini @ 2013-06-27  7:09 UTC (permalink / raw)
  To: Kevin Wolf; +Cc: Fam Zheng, qemu-devel, stefanha, qemu-stable

Il 26/06/2013 17:05, Kevin Wolf ha scritto:
> Am 26.06.2013 um 11:24 hat Fam Zheng geschrieben:
>> > When creating image with backing file, the driver tries to calculate the
>> > relative path from created image file to backing file, but the path
>> > computation is incorrect. e.g.:
>> > 
>> >     $ qemu-img create -f vmdk -b vmdk-data-disk.vmdk vmdk-data-snapshot1
>> >     Formatting 'vmdk-data-snapshot1', fmt=vmdk size=10737418240
>> >     backing_file='vmdk-data-disk.vmdk' compat6=off zeroed_grain=off
>> > 
>> >     $ qemu-img info vmdk-data-snapshot1
>> >     image: vmdk-data-snapshot1
>> >     file format: vmdk
>> >     virtual size: 10G (10737418240 bytes)
>> >     disk size: 12K
>> > ->  backing file: disk.vmdk
>> > 
>> > The common part in file names, "vmdk-data-", is incorrectly forgotten by
>> > relative_path(). As the VMDK specification has no restriction on
>> > parentNameHint to be relative path, we simply remove this by using the
>> > backing_file option.
>> > 
>> > Signed-off-by: Fam Zheng <famz@redhat.com>
> Nice one. Thanks, applied to the block branch.

Cc: qemu-stable@nongnu.org

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [Qemu-devel] [PATCH] vmdk: remove wrong calculation of relative path
  2013-06-27  7:09   ` Paolo Bonzini
@ 2013-06-27  7:55     ` Kevin Wolf
  0 siblings, 0 replies; 4+ messages in thread
From: Kevin Wolf @ 2013-06-27  7:55 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: Fam Zheng, qemu-devel, stefanha, qemu-stable

Am 27.06.2013 um 09:09 hat Paolo Bonzini geschrieben:
> Il 26/06/2013 17:05, Kevin Wolf ha scritto:
> > Am 26.06.2013 um 11:24 hat Fam Zheng geschrieben:
> >> > When creating image with backing file, the driver tries to calculate the
> >> > relative path from created image file to backing file, but the path
> >> > computation is incorrect. e.g.:
> >> > 
> >> >     $ qemu-img create -f vmdk -b vmdk-data-disk.vmdk vmdk-data-snapshot1
> >> >     Formatting 'vmdk-data-snapshot1', fmt=vmdk size=10737418240
> >> >     backing_file='vmdk-data-disk.vmdk' compat6=off zeroed_grain=off
> >> > 
> >> >     $ qemu-img info vmdk-data-snapshot1
> >> >     image: vmdk-data-snapshot1
> >> >     file format: vmdk
> >> >     virtual size: 10G (10737418240 bytes)
> >> >     disk size: 12K
> >> > ->  backing file: disk.vmdk
> >> > 
> >> > The common part in file names, "vmdk-data-", is incorrectly forgotten by
> >> > relative_path(). As the VMDK specification has no restriction on
> >> > parentNameHint to be relative path, we simply remove this by using the
> >> > backing_file option.
> >> > 
> >> > Signed-off-by: Fam Zheng <famz@redhat.com>
> > Nice one. Thanks, applied to the block branch.
> 
> Cc: qemu-stable@nongnu.org

Yeah, why not. I've added it to the commit message now.

Kevin

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2013-06-27  7:55 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-06-26  9:24 [Qemu-devel] [PATCH] vmdk: remove wrong calculation of relative path Fam Zheng
2013-06-26 15:05 ` Kevin Wolf
2013-06-27  7:09   ` Paolo Bonzini
2013-06-27  7:55     ` Kevin Wolf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).