Patchwork [23/24] block: Create proper size file for disk mirror

login
register
mail settings
Submitter Kevin Wolf
Date Jan. 25, 2013, 6:45 p.m.
Message ID <1359139560-15387-24-git-send-email-kwolf@redhat.com>
Download mbox | patch
Permalink /patch/215854/
State New
Headers show

Comments

Kevin Wolf - Jan. 25, 2013, 6:45 p.m.
From: Vishvananda Ishaya <vishvananda@gmail.com>

The qmp monitor command to mirror a disk was passing -1 for size
along with the disk's backing file. This size of the resulting disk
is the size of the backing file, which is incorrect if the disk
has been resized. Therefore we should always pass in the size of
the current disk.

Signed-off-by: Vishvananda Ishaya <vishvananda@gmail.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
 blockdev.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

Patch

diff --git a/blockdev.c b/blockdev.c
index ac396f3..fdc573f 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -1282,11 +1282,11 @@  void qmp_drive_mirror(const char *device, const char *target,
         return;
     }
 
+    bdrv_get_geometry(bs, &size);
+    size *= 512;
     if (sync == MIRROR_SYNC_MODE_FULL && mode != NEW_IMAGE_MODE_EXISTING) {
         /* create new image w/o backing file */
         assert(format && drv);
-        bdrv_get_geometry(bs, &size);
-        size *= 512;
         bdrv_img_create(target, format,
                         NULL, NULL, NULL, size, flags, &local_err);
     } else {
@@ -1299,7 +1299,7 @@  void qmp_drive_mirror(const char *device, const char *target,
             bdrv_img_create(target, format,
                             source->filename,
                             source->drv->format_name,
-                            NULL, -1, flags, &local_err);
+                            NULL, size, flags, &local_err);
             break;
         default:
             abort();