From: Eric Blake <eblake@redhat.com>
To: Alex Bligh <alex@alex.org.uk>
Cc: Kevin Wolf <kwolf@redhat.com>, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCHv3] qemu-img rebase: use empty string to rebase without backing file
Date: Mon, 15 Oct 2012 15:04:37 -0600 [thread overview]
Message-ID: <507C7A65.3040704@redhat.com> (raw)
In-Reply-To: <1350334241-1718-1-git-send-email-alex@alex.org.uk>
[-- Attachment #1: Type: text/plain, Size: 4637 bytes --]
On 10/15/2012 02:50 PM, Alex Bligh wrote:
> This patch allows an empty filename to be passed as the new base image name
> for qemu-img rebase to mean base the image on no backing file (i.e.
> independent of any backing file). According to Eric Blake, qemu-img rebase
> already supports this when '-u' is used; this adds support when -u is not
> used.
>
> Signed-off-by: Alex Bligh <alex@alex.org.uk>
> ---
> qemu-img.c | 26 ++++++++++++++++----------
> qemu-img.texi | 4 +++-
> 2 files changed, 19 insertions(+), 11 deletions(-)
Per http://wiki.qemu.org/Contribute/SubmitAPatch, it helps to add a
maintainer in cc; I'm guessing that this is most closely related to
block work, and therefore adding Kevin in cc.
Reviewed-by: Eric Blake <eblake@redhat.com>
>
> Also obtainable from:
> https://github.com/abligh/qemu.git
> Commit at:
> https://github.com/abligh/qemu/commit/49cd454aa09062b151710cc7afd4bb7fcf1070d0
>
> diff --git a/qemu-img.c b/qemu-img.c
> index f17f187..e817498 100644
> --- a/qemu-img.c
> +++ b/qemu-img.c
> @@ -1558,13 +1558,14 @@ static int img_rebase(int argc, char **argv)
> error_report("Could not open old backing file '%s'", backing_name);
> goto out;
> }
> -
> - bs_new_backing = bdrv_new("new_backing");
> - ret = bdrv_open(bs_new_backing, out_baseimg, BDRV_O_FLAGS,
> + if (out_baseimg[0]) {
> + bs_new_backing = bdrv_new("new_backing");
> + ret = bdrv_open(bs_new_backing, out_baseimg, BDRV_O_FLAGS,
> new_backing_drv);
> - if (ret) {
> - error_report("Could not open new backing file '%s'", out_baseimg);
> - goto out;
> + if (ret) {
> + error_report("Could not open new backing file '%s'", out_baseimg);
> + goto out;
> + }
> }
> }
>
> @@ -1580,7 +1581,7 @@ static int img_rebase(int argc, char **argv)
> if (!unsafe) {
> uint64_t num_sectors;
> uint64_t old_backing_num_sectors;
> - uint64_t new_backing_num_sectors;
> + uint64_t new_backing_num_sectors = 0;
> uint64_t sector;
> int n;
> uint8_t * buf_old;
> @@ -1592,7 +1593,8 @@ static int img_rebase(int argc, char **argv)
>
> bdrv_get_geometry(bs, &num_sectors);
> bdrv_get_geometry(bs_old_backing, &old_backing_num_sectors);
> - bdrv_get_geometry(bs_new_backing, &new_backing_num_sectors);
> + if (bs_new_backing)
> + bdrv_get_geometry(bs_new_backing, &new_backing_num_sectors);
>
> local_progress = (float)100 /
> (num_sectors / MIN(num_sectors, IO_BUF_SIZE / 512));
> @@ -1629,7 +1631,7 @@ static int img_rebase(int argc, char **argv)
> }
> }
>
> - if (sector >= new_backing_num_sectors) {
> + if (sector >= new_backing_num_sectors || !bs_new_backing) {
> memset(buf_new, 0, n * BDRV_SECTOR_SIZE);
> } else {
> if (sector + n > new_backing_num_sectors) {
> @@ -1675,7 +1677,11 @@ static int img_rebase(int argc, char **argv)
> * backing file are overwritten in the COW file now, so the visible content
> * doesn't change when we switch the backing file.
> */
> - ret = bdrv_change_backing_file(bs, out_baseimg, out_basefmt);
> + if (bs_new_backing)
> + ret = bdrv_change_backing_file(bs, out_baseimg, out_basefmt);
> + else
> + ret = bdrv_change_backing_file(bs, NULL, NULL);
> +
> if (ret == -ENOSPC) {
> error_report("Could not change the backing file to '%s': No "
> "space left in the file header", out_baseimg);
> diff --git a/qemu-img.texi b/qemu-img.texi
> index 8b05f2c..42ec392 100644
> --- a/qemu-img.texi
> +++ b/qemu-img.texi
> @@ -148,7 +148,9 @@ Changes the backing file of an image. Only the formats @code{qcow2} and
>
> The backing file is changed to @var{backing_file} and (if the image format of
> @var{filename} supports this) the backing file format is changed to
> -@var{backing_fmt}.
> +@var{backing_fmt}. If @var{backing_file} is specified as ``'' (the empty
> +string), then the image is rebased onto no backing file (i.e. it will exist
> +independently of any backing file).
>
> There are two different modes in which @code{rebase} can operate:
> @table @option
>
--
Eric Blake eblake@redhat.com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 617 bytes --]
next prev parent reply other threads:[~2012-10-15 21:04 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-15 20:50 [Qemu-devel] [PATCHv3] qemu-img rebase: use empty string to rebase without backing file Alex Bligh
2012-10-15 21:04 ` Eric Blake [this message]
2012-10-16 11:22 ` Kevin Wolf
2012-10-16 12:47 ` Alex Bligh
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=507C7A65.3040704@redhat.com \
--to=eblake@redhat.com \
--cc=alex@alex.org.uk \
--cc=kwolf@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.