From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53750) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zuhhc-000357-Mq for qemu-devel@nongnu.org; Fri, 06 Nov 2015 09:09:17 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZuhhX-0007zr-Mb for qemu-devel@nongnu.org; Fri, 06 Nov 2015 09:09:16 -0500 Received: from mail-wm0-x22d.google.com ([2a00:1450:400c:c09::22d]:38171) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZuhhX-0007z8-Gw for qemu-devel@nongnu.org; Fri, 06 Nov 2015 09:09:11 -0500 Received: by wmec201 with SMTP id c201so18591748wme.1 for ; Fri, 06 Nov 2015 06:09:10 -0800 (PST) Date: Fri, 6 Nov 2015 14:09:08 +0000 From: Stefan Hajnoczi Message-ID: <20151106140908.GN12285@stefanha-x1.localdomain> References: <1446657582-21619-1-git-send-email-den@openvz.org> <1446657582-21619-4-git-send-email-den@openvz.org> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="yAzUYvkKIfeS0jQX" Content-Disposition: inline In-Reply-To: <1446657582-21619-4-git-send-email-den@openvz.org> Subject: Re: [Qemu-devel] [PATCH 03/11] snapshot: create bdrv_all_delete_snapshot helper List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Denis V. Lunev" Cc: Kevin Wolf , qemu-devel@nongnu.org, Stefan Hajnoczi , Juan Quintela --yAzUYvkKIfeS0jQX Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Wed, Nov 04, 2015 at 08:19:34PM +0300, Denis V. Lunev wrote: > to delete snapshots from all loaded block drivers. >=20 > The patch also ensures proper locking. >=20 > Signed-off-by: Denis V. Lunev > CC: Juan Quintela > CC: Stefan Hajnoczi > CC: Kevin Wolf > --- > block/snapshot.c | 22 ++++++++++++++++++++ > include/block/snapshot.h | 2 ++ > migration/savevm.c | 54 +++++++++---------------------------------= ------ > 3 files changed, 34 insertions(+), 44 deletions(-) >=20 > diff --git a/block/snapshot.c b/block/snapshot.c > index d729c76..1b4b846 100644 > --- a/block/snapshot.c > +++ b/block/snapshot.c > @@ -384,3 +384,25 @@ bool bdrv_all_can_snapshot(BlockDriverState **first_= bad_bs) > *first_bad_bs =3D bs; > return ok; > } > + > +int bdrv_all_delete_snapshot(const char *name, BlockDriverState **first_= bad_bs, > + Error **err) > +{ > + int ret =3D 0; > + BlockDriverState *bs =3D NULL; > + QEMUSnapshotInfo sn1, *snapshot =3D &sn1; > + > + while ((bs =3D bdrv_next(bs)) && ret =3D=3D 0) { If ret !=3D 0 we will iterate to the next bs. first_bad_bs will be incorrect. > + AioContext *ctx =3D bdrv_get_aio_context(bs); > + > + aio_context_acquire(ctx); > + if (bdrv_can_snapshot(bs) && > + bdrv_snapshot_find(bs, snapshot, name) >=3D 0) { > + ret =3D bdrv_snapshot_delete_by_id_or_name(bs, name, err); > + } > + aio_context_release(ctx); > + } > + > + *first_bad_bs =3D bs; > + return ret; > +} Similar approach without the int return value: bool bdrv_all_delete_snapshot(const char *name, BlockDriverState **first_ba= d_bs, Error **err) { Error *local_err =3D NULL; BlockDriverState *bs =3D NULL; QEMUSnapshotInfo sn1, *snapshot =3D &sn1; while ((bs =3D bdrv_next(bs)) { AioContext *ctx =3D bdrv_get_aio_context(bs); aio_context_acquire(bs); if (bdrv_can_snapshot(bs) && bdrv_snapshot_find(bs, snapshot, name) >=3D 0) { bdrv_snapshot_delete_by_id_or_name(bs, name, &local_err); } aio_context_release(bs); if (local_err) { error_propagate(err, local_err); return false; } } return true; } --yAzUYvkKIfeS0jQX Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQEbBAEBAgAGBQJWPLSEAAoJEJykq7OBq3PIxekH8gLXNthTxHkn1BwE8NEYgdpw uIYhrihYzNmQL1I3axZVXK1UwajrDlrwzjd6T3Veg9qgWgg33/W7GMhV7xkfgwDJ CcQVw3ORsekf8Tol4w1Q4OEDPYb8zpBvNqAfRGK+uXZ//LZ5AtPe2FqlZ0GMhal3 cijUlQelTkImCEPRp+xFHcqHc5CYp8XM6qotjmHzKX6HeoIN/pvOu63uSSrOC2R3 HyMP6DU/C23vrSwFY7ucbKwC+oGtG+y+XnGsSGmL2C+ZxidzUUa3XEZ/OxCg7a4r 0DebZ/8c+lZmobcYrndHd9j5wHZdDEiJxxjKVyyYXaHGxrBUYuNKQHxGog4uXg== =kmmj -----END PGP SIGNATURE----- --yAzUYvkKIfeS0jQX--