diff options
author | Denis V. Lunev <den@openvz.org> | 2015-11-19 09:42:06 +0300 |
---|---|---|
committer | Juan Quintela <quintela@redhat.com> | 2015-11-19 11:50:00 +0100 |
commit | 723ccda1a0eecece8e70dbcdd35a603f6c41a475 (patch) | |
tree | 8e462a0102033941eca7ac510abc4c15dae3af04 /block | |
parent | 849f96e2f71b52444516a0880fd9d12691b63d20 (diff) |
snapshot: create bdrv_all_find_snapshot helper
to check that snapshot is available for all loaded block drivers.
The check bs != bs1 in hmp_info_snapshots is an optimization. The check
for availability of this snapshot will return always true as the list
of snapshots was collected from that image.
The patch also ensures proper locking.
Signed-off-by: Denis V. Lunev <den@openvz.org>
Reviewed-by: Fam Zheng <famz@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
CC: Stefan Hajnoczi <stefanha@redhat.com>
CC: Kevin Wolf <kwolf@redhat.com>
Tested-by: Greg Kurz <gkurz@linux.vnet.ibm.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
Diffstat (limited to 'block')
-rw-r--r-- | block/snapshot.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/block/snapshot.c b/block/snapshot.c index 9f07a63e6d..eae4730fc6 100644 --- a/block/snapshot.c +++ b/block/snapshot.c @@ -423,3 +423,23 @@ int bdrv_all_goto_snapshot(const char *name, BlockDriverState **first_bad_bs) *first_bad_bs = bs; return err; } + +int bdrv_all_find_snapshot(const char *name, BlockDriverState **first_bad_bs) +{ + QEMUSnapshotInfo sn; + int err = 0; + BlockDriverState *bs = NULL; + + while (err == 0 && (bs = bdrv_next(bs))) { + AioContext *ctx = bdrv_get_aio_context(bs); + + aio_context_acquire(ctx); + if (bdrv_can_snapshot(bs)) { + err = bdrv_snapshot_find(bs, &sn, name); + } + aio_context_release(ctx); + } + + *first_bad_bs = bs; + return err; +} |