qemu-block
[Top][All Lists]
Advanced

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

Re: [PATCH v7 23/47] block/snapshot: Fix fallback


From: Andrey Shinkevich
Subject: Re: [PATCH v7 23/47] block/snapshot: Fix fallback
Date: Thu, 16 Jul 2020 01:18:59 +0300
User-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:68.0) Gecko/20100101 Thunderbird/68.9.0

On 16.07.2020 00:22, Andrey Shinkevich wrote:
On 25.06.2020 18:21, Max Reitz wrote:
If the top node's driver does not provide snapshot functionality and we
want to fall back to a node down the chain, we need to snapshot all
non-COW children.  For simplicity's sake, just do not fall back if there

I guess it comes to COW children like BDRV_CHILD_DATA | BDRV_CHILD_METADATA  rather than non-COW ones, does it?


The BDRV_CHILD_COW is mutually exclusive with DATA, METADATA and FILTERED per definition.

Sorry about the question.

Andrey


is more than one such child.  Furthermore, we really only can fall back
to bs->file and bs->backing, because bdrv_snapshot_goto() has to modify
the child link (notably, set it to NULL).

Suggested-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
---
  block/snapshot.c | 104 +++++++++++++++++++++++++++++++++++++----------
  1 file changed, 83 insertions(+), 21 deletions(-)

diff --git a/block/snapshot.c b/block/snapshot.c
...
+    /*
+     * Check that there are no other children that would need to be
+     * snapshotted.  If there are, it is not safe to fall back to
+     * *fallback.
+     */
+    QLIST_FOREACH(child, &bs->children, next) {
+        if (child->role & (BDRV_CHILD_DATA | BDRV_CHILD_METADATA |
+                           BDRV_CHILD_FILTERED) &&
+            child != *fallback)
+        {
+            return NULL;
+        }
+    }
+
+    return fallback;
+}

...

Reviewed-by: Andrey Shinkevich <andrey.shinkevich@virtuozzo.com>





reply via email to

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