* [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).