Message ID | 1267528471-7011-1-git-send-email-kwolf@redhat.com |
---|---|
State | New |
Headers | show |
Kevin Wolf <kwolf@redhat.com> wrote: > Allow the user to specify the format of the image to rebase. > > Signed-off-by: Kevin Wolf <kwolf@redhat.com> Acked-by: Juan Quintela <quintela@redhat.com> This is needed to use rebase with qcow2 images on block devices.
On 03/02/2010 05:14 AM, Kevin Wolf wrote: > Allow the user to specify the format of the image to rebase. > > Signed-off-by: Kevin Wolf<kwolf@redhat.com> > Applied. Thanks. Regards, Anthony Liguori > --- > qemu-img.c | 20 ++++++++++++++++---- > 1 files changed, 16 insertions(+), 4 deletions(-) > > diff --git a/qemu-img.c b/qemu-img.c > index 258dc62..7fc980a 100644 > --- a/qemu-img.c > +++ b/qemu-img.c > @@ -1081,24 +1081,28 @@ static int 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; > @@ -1125,8 +1129,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 | BDRV_O_RDWR | (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); > } > >
diff --git a/qemu-img.c b/qemu-img.c index 258dc62..7fc980a 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -1081,24 +1081,28 @@ static int 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; @@ -1125,8 +1129,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 | BDRV_O_RDWR | (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); }
Allow the user to specify the format of the image to rebase. Signed-off-by: Kevin Wolf <kwolf@redhat.com> --- qemu-img.c | 20 ++++++++++++++++---- 1 files changed, 16 insertions(+), 4 deletions(-)