Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > 3160499aacb81f6735941eb4c372d87a > files > 591

kvm-83-164.el5_5.30.src.rpm

From d3c3caa3ac8f719d240817b5b4e36ca32471179f Mon Sep 17 00:00:00 2001
From: Kevin Wolf <kwolf@redhat.com>
Date: Tue, 2 Mar 2010 12:05:18 -0300
Subject: [PATCH 1/2] qemu-img rebase: Add -f option

RH-Author: Kevin Wolf <kwolf@redhat.com>
Message-id: <1267531518-8267-1-git-send-email-kwolf@redhat.com>
Patchwork-id: 7393
O-Subject: [RHEL-5.5 KVM PATCH] qemu-img rebase: Add -f option
Bugzilla: 569762
RH-Acked-by: Juan Quintela <quintela@redhat.com>
RH-Acked-by: Gleb Natapov <gleb@redhat.com>
RH-Acked-by: Christoph Hellwig <chellwig@redhat.com>

Bugzilla: 569762
Upstream status: Submitted

Allow the user to specify the format of the image to rebase.
This is needed to use rebase with qcow2 images on block devices.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
 qemu/qemu-img.c |   20 ++++++++++++++++----
 1 files changed, 16 insertions(+), 4 deletions(-)

Signed-off-by: Glauber Costa <glommer@redhat.com>
---
 qemu/qemu-img.c |   20 ++++++++++++++++----
 1 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/qemu/qemu-img.c b/qemu/qemu-img.c
index 6c2685a..994887d 100644
--- a/qemu/qemu-img.c
+++ b/qemu/qemu-img.c
@@ -987,24 +987,28 @@ static void img_snapshot(int argc, char **argv)
 static int img_rebase(int argc, char **argv)
 {
     BlockDriverState *bs, *bs_old_backing, *bs_new_backing;
-    BlockDriver *old_backing_drv, *new_backing_drv;
+    BlockDriver *drv, *old_backing_drv, *new_backing_drv;
     char *filename;
-    const char *out_basefmt, *out_baseimg;
+    const char *fmt, *out_basefmt, *out_baseimg;
     int c, flags, ret;
     int unsafe = 0;
 
     /* Parse commandline parameters */
+    fmt = NULL;
     out_baseimg = NULL;
     out_basefmt = NULL;
 
     for(;;) {
-        c = getopt(argc, argv, "uhF:b:");
+        c = getopt(argc, argv, "uhf:F:b:");
         if (c == -1)
             break;
         switch(c) {
         case 'h':
             help();
             return 0;
+        case 'f':
+            fmt = optarg;
+            break;
         case 'F':
             out_basefmt = optarg;
             break;
@@ -1031,8 +1035,16 @@ static int img_rebase(int argc, char **argv)
     if (!bs)
         error("Not enough memory");
 
+    drv = NULL;
+    if (fmt) {
+        drv = bdrv_find_format(fmt);
+        if (drv == NULL) {
+            error("Invalid format name: '%s'", fmt);
+        }
+    }
+
     flags = BRDV_O_FLAGS | (unsafe ? BDRV_O_NO_BACKING : 0);
-    if (bdrv_open2(bs, filename, flags, NULL) < 0) {
+    if (bdrv_open2(bs, filename, flags, drv) < 0) {
         error("Could not open '%s'", filename);
     }
 
-- 
1.6.6