From: Stefan Hajnoczi <stefa...@redhat.com> The vpc driver has two methods of determining virtual disk size. The correct one to use depends on the software that generated the image file. Add the XenServer creator_app signature so that image size is correctly detected for those images.
Reported-by: Grant Wu <grant...@gmail.com> Reported-by: Spencer Baugh <sba...@catern.com> Signed-off-by: Stefan Hajnoczi <stefa...@redhat.com> Signed-off-by: Jeff Cody <jc...@redhat.com> --- block/vpc.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/block/vpc.c b/block/vpc.c index bc3d1c6..8b8b9a7 100644 --- a/block/vpc.c +++ b/block/vpc.c @@ -298,6 +298,7 @@ static int vpc_open(BlockDriverState *bs, QDict *options, int flags, * 'qem2' : current_size QEMU (uses current_size) * 'win ' : current_size Hyper-V * 'd2v ' : current_size Disk2vhd + * 'tap\0' : current_size XenServer * * The user can override the table values via drive options, however * even with an override we will still use current_size for images @@ -305,7 +306,8 @@ static int vpc_open(BlockDriverState *bs, QDict *options, int flags, */ use_chs = (!!strncmp(footer->creator_app, "win ", 4) && !!strncmp(footer->creator_app, "qem2", 4) && - !!strncmp(footer->creator_app, "d2v ", 4)) || s->force_use_chs; + !!strncmp(footer->creator_app, "d2v ", 4) && + !!memcmp(footer->creator_app, "tap", 4)) || s->force_use_chs; if (!use_chs || bs->total_sectors == VHD_MAX_GEOMETRY || s->force_use_sz) { bs->total_sectors = be64_to_cpu(footer->current_size) / -- 1.9.3