qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Hanna Reitz <hreitz@redhat.com>
To: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>,
	qemu-block@nongnu.org
Cc: fam@euphon.net, kwolf@redhat.com, jsnow@redhat.com,
	qemu-devel@nongnu.org, armbru@redhat.com,
	nikita.lapshin@virtuozzo.com, stefanha@redhat.com,
	eblake@redhat.com
Subject: Re: [PATCH v5 11/16] block: introduce snapshot-access block driver
Date: Thu, 3 Mar 2022 12:05:12 +0100	[thread overview]
Message-ID: <6ac72250-00c9-d998-fbe7-4c8d958476d7@redhat.com> (raw)
In-Reply-To: <20220228113927.1852146-12-vsementsov@virtuozzo.com>

On 28.02.22 12:39, Vladimir Sementsov-Ogievskiy wrote:
> The new block driver simply utilizes snapshot-access API of underlying
> block node.
>
> In further patches we want to use it like this:
>
> [guest]                   [NBD export]
>     |                            |
>     | root                       | root
>     v                 file       v
> [copy-before-write]<------[snapshot-access]
>     |           |
>     | file      | target
>     v           v
> [active-disk] [temp.img]
>
> This way, NBD client will be able to read snapshotted state of active
> disk, when active disk is continued to be written by guest. This is
> known as "fleecing", and currently uses another scheme based on qcow2
> temporary image which backing file is active-disk. New scheme comes
> with benefits - see next commit.
>
> The other possible application is exporting internal snapshots of
> qcow2, like this:
>
> [guest]          [NBD export]
>     |                  |
>     | root             | root
>     v       file       v
> [qcow2]<---------[snapshot-access]
>
> For this, we'll need to implement snapshot-access API handlers in
> qcow2 driver, and improve snapshot-access block driver (and API) to
> make it possible to select snapshot by name. Another thing to improve
> is size of snapshot. Now for simplicity we just use size of bs->file,
> which is OK for backup, but for qcow2 snapshots export we'll need to
> imporve snapshot-access API to get size of snapshot.
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
>   qapi/block-core.json    |   4 +-
>   block/snapshot-access.c | 132 ++++++++++++++++++++++++++++++++++++++++
>   MAINTAINERS             |   1 +
>   block/meson.build       |   1 +
>   4 files changed, 137 insertions(+), 1 deletion(-)
>   create mode 100644 block/snapshot-access.c

[...]

> diff --git a/block/snapshot-access.c b/block/snapshot-access.c
> new file mode 100644
> index 0000000000..77b87c1946
> --- /dev/null
> +++ b/block/snapshot-access.c

[...]

> +static int snapshot_access_open(BlockDriverState *bs, QDict *options, int flags,
> +                                Error **errp)
> +{
> +    bs->file = bdrv_open_child(NULL, options, "file", bs, &child_of_bds,
> +                               BDRV_CHILD_DATA | BDRV_CHILD_PRIMARY,
> +                               false, errp);
> +    if (!bs->file) {
> +        return -EINVAL;
> +    }
> +
> +    bs->total_sectors = bs->file->bs->total_sectors;

(If I hadn’t commented on patch 16, I wouldn’t’ve here, but now I might 
as well...)

Instead of just a comment in the commit message (which noone will really 
read later on), I prefer a TODO or FIXME comment directly here in the 
code, or even better in the API added in the previous patch (i.e. as 
part of the comment in the BlockDriver struct), that this will not work 
for qcow2, i.e. that we will need to inquire the snapshot size from the 
snapshot-providing node.

It’s OK not to implement that now, but I don’t think having a note just 
in the commit message will help us remember.

> +
> +    return 0;
> +}



  reply	other threads:[~2022-03-03 11:06 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-28 11:39 [PATCH v5 00/16] Make image fleecing more usable Vladimir Sementsov-Ogievskiy
2022-02-28 11:39 ` [PATCH v5 01/16] block/block-copy: move copy_bitmap initialization to block_copy_state_new() Vladimir Sementsov-Ogievskiy
2022-02-28 11:39 ` [PATCH v5 02/16] block/dirty-bitmap: bdrv_merge_dirty_bitmap(): add return value Vladimir Sementsov-Ogievskiy
2022-02-28 11:39 ` [PATCH v5 03/16] block/block-copy: block_copy_state_new(): add bitmap parameter Vladimir Sementsov-Ogievskiy
2022-02-28 11:39 ` [PATCH v5 04/16] block/copy-before-write: add bitmap open parameter Vladimir Sementsov-Ogievskiy
2022-02-28 11:39 ` [PATCH v5 05/16] block/block-copy: add block_copy_reset() Vladimir Sementsov-Ogievskiy
2022-02-28 11:39 ` [PATCH v5 06/16] block: intoduce reqlist Vladimir Sementsov-Ogievskiy
2022-02-28 11:39 ` [PATCH v5 07/16] block/reqlist: reqlist_find_conflict(): use ranges_overlap() Vladimir Sementsov-Ogievskiy
2022-02-28 11:39 ` [PATCH v5 08/16] block/dirty-bitmap: introduce bdrv_dirty_bitmap_status() Vladimir Sementsov-Ogievskiy
2022-02-28 11:39 ` [PATCH v5 09/16] block/reqlist: add reqlist_wait_all() Vladimir Sementsov-Ogievskiy
2022-02-28 11:39 ` [PATCH v5 10/16] block/io: introduce block driver snapshot-access API Vladimir Sementsov-Ogievskiy
2022-02-28 11:39 ` [PATCH v5 11/16] block: introduce snapshot-access block driver Vladimir Sementsov-Ogievskiy
2022-03-03 11:05   ` Hanna Reitz [this message]
2022-03-03 11:11     ` Hanna Reitz
2022-03-03 17:26       ` Vladimir Sementsov-Ogievskiy
2022-02-28 11:39 ` [PATCH v5 12/16] block: copy-before-write: realize snapshot-access API Vladimir Sementsov-Ogievskiy
2022-02-28 11:39 ` [PATCH v5 13/16] iotests/image-fleecing: add test-case for fleecing format node Vladimir Sementsov-Ogievskiy
2022-02-28 11:39 ` [PATCH v5 14/16] iotests.py: add qemu_io_pipe_and_status() Vladimir Sementsov-Ogievskiy
2022-02-28 11:39 ` [PATCH v5 15/16] iotests/image-fleecing: add test case with bitmap Vladimir Sementsov-Ogievskiy
2022-03-03 11:44   ` Hanna Reitz
2022-03-03 12:57     ` Hanna Reitz
2022-02-28 11:39 ` [PATCH v5 16/16] iotests/image-fleecing: test push backup with fleecing Vladimir Sementsov-Ogievskiy
2022-03-03 10:58   ` Hanna Reitz
2022-03-03 17:35     ` Vladimir Sementsov-Ogievskiy

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=6ac72250-00c9-d998-fbe7-4c8d958476d7@redhat.com \
    --to=hreitz@redhat.com \
    --cc=armbru@redhat.com \
    --cc=eblake@redhat.com \
    --cc=fam@euphon.net \
    --cc=jsnow@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=nikita.lapshin@virtuozzo.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    --cc=vsementsov@virtuozzo.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).