qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v4 11/18] block: introduce snapshot-access filter


From: Hanna Reitz
Subject: Re: [PATCH v4 11/18] block: introduce snapshot-access filter
Date: Thu, 24 Feb 2022 13:29:43 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.5.0

On 16.02.22 20:46, Vladimir Sementsov-Ogievskiy wrote:
The filter simply utilizes snapshot-access API of underlying block

Nit picking: Well, it isn’t really a filter.  I understand where you’re coming from, but by definition it isn’t a filter driver.

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 filter (and API) to make it
possibele to select snapshot by name.

s/possibele/possible/

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

Again, I like this very much, not least because it provides a clean way to solve the long-standing question of how to nicely export qcow2 snapshots.

[...]

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;

(qcow2) snapshots can have a size that differs from the image’s current (active layer) size.  We should accommodate for that here (I guess I’d be fine with a FIXME, too, but introducing FIXMEs is always not exactly great), I think.

+
+    return 0;
+}
+




reply via email to

[Prev in Thread] Current Thread [Next in Thread]