aboutsummaryrefslogtreecommitdiff
path: root/blockdev.c
diff options
context:
space:
mode:
authorMax Reitz <mreitz@redhat.com>2020-02-18 11:34:36 +0100
committerKevin Wolf <kwolf@redhat.com>2020-02-18 11:55:38 +0100
commitca08d937e886aea7b9ce2c05d41e5c1aeec07a9f (patch)
tree743913949e9d21c1d2f7f3ccaf6c2cd229088111 /blockdev.c
parent74e4a8a9614a96a7b7e34778d33e1f05a30d312d (diff)
downloadqemu-ca08d937e886aea7b9ce2c05d41e5c1aeec07a9f.zip
qemu-ca08d937e886aea7b9ce2c05d41e5c1aeec07a9f.tar.gz
qemu-ca08d937e886aea7b9ce2c05d41e5c1aeec07a9f.tar.bz2
blockdev: Allow external snapshots everywhere
There is no good reason why we would allow external snapshots only on the first non-filter node in a chain. Parent BDSs should not care whether their child is replaced by a snapshot. (If they do care, they should announce that via freezing the chain, which is checked in bdrv_append() through bdrv_set_backing_hd().) Before we had bdrv_is_first_non_filter() here (since 212a5a8f095), there was a special function bdrv_check_ext_snapshot() that allowed snapshots by default, but block drivers could override this. Only blkverify did so, however. It is not clear to me why blkverify would do so; maybe just so that the testee block driver would not be replaced. The introducing commit f6186f49e2c does not explain why. Maybe because 08b24cfe376 would have been the correct solution? (Which adds a .supports_backing check.) Signed-off-by: Max Reitz <mreitz@redhat.com> Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Message-Id: <20200218103454.296704-2-mreitz@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'blockdev.c')
-rw-r--r--blockdev.c5
1 files changed, 0 insertions, 5 deletions
diff --git a/blockdev.c b/blockdev.c
index 374189a..d83bb2b 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -1592,11 +1592,6 @@ static void external_snapshot_prepare(BlkActionState *common,
}
}
- if (!bdrv_is_first_non_filter(state->old_bs)) {
- error_setg(errp, QERR_FEATURE_DISABLED, "snapshot");
- goto out;
- }
-
if (action->type == TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT_SYNC) {
BlockdevSnapshotSync *s = action->u.blockdev_snapshot_sync.data;
const char *format = s->has_format ? s->format : "qcow2";