From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42388) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a9tsd-0007ut-Qd for qemu-devel@nongnu.org; Fri, 18 Dec 2015 07:11:28 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1a9tsc-00034P-VD for qemu-devel@nongnu.org; Fri, 18 Dec 2015 07:11:27 -0500 Date: Fri, 18 Dec 2015 13:11:19 +0100 From: Kevin Wolf Message-ID: <20151218121119.GC31910@noname.redhat.com> References: <1450290827-30508-3-git-send-email-pbonzini@redhat.com> <20151217015555.GD20007@ad.usersys.redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20151217015555.GD20007@ad.usersys.redhat.com> Subject: Re: [Qemu-devel] [PATCH] block: use drained section around bdrv_snapshot_delete List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Fam Zheng Cc: Paolo Bonzini , qemu-devel@nongnu.org, qemu-block@nongnu.org [ Cc: qemu-block ] Am 17.12.2015 um 02:55 hat Fam Zheng geschrieben: > On Wed, 12/16 19:33, Paolo Bonzini wrote: > > Do not use bdrv_drain, since by itself it does not guarantee > > anything. > > > > Signed-off-by: Paolo Bonzini Thanks, applied to the block branch. Kevin > > block/snapshot.c | 23 ++++++++++++++--------- > > 1 file changed, 14 insertions(+), 9 deletions(-) > > > > diff --git a/block/snapshot.c b/block/snapshot.c > > index 6e9fa8d..2d86b88 100644 > > --- a/block/snapshot.c > > +++ b/block/snapshot.c > > @@ -229,6 +229,8 @@ int bdrv_snapshot_delete(BlockDriverState *bs, > > Error **errp) > > { > > BlockDriver *drv = bs->drv; > > + int ret; > > + > > if (!drv) { > > error_setg(errp, QERR_DEVICE_HAS_NO_MEDIUM, bdrv_get_device_name(bs)); > > return -ENOMEDIUM; > > @@ -239,18 +241,21 @@ int bdrv_snapshot_delete(BlockDriverState *bs, > > } > > > > /* drain all pending i/o before deleting snapshot */ > > - bdrv_drain(bs); > > + bdrv_drained_begin(bs); > > > > if (drv->bdrv_snapshot_delete) { > > - return drv->bdrv_snapshot_delete(bs, snapshot_id, name, errp); > > + ret = drv->bdrv_snapshot_delete(bs, snapshot_id, name, errp); > > + } else if (bs->file) { > > + ret = bdrv_snapshot_delete(bs->file->bs, snapshot_id, name, errp); > > + } else { > > + error_setg(errp, "Block format '%s' used by device '%s' " > > + "does not support internal snapshot deletion", > > + drv->format_name, bdrv_get_device_name(bs)); > > + ret = -ENOTSUP; > > } > > - if (bs->file) { > > - return bdrv_snapshot_delete(bs->file->bs, snapshot_id, name, errp); > > - } > > - error_setg(errp, "Block format '%s' used by device '%s' " > > - "does not support internal snapshot deletion", > > - drv->format_name, bdrv_get_device_name(bs)); > > - return -ENOTSUP; > > + > > + bdrv_drained_end(bs); > > + return ret; > > } > > > > int bdrv_snapshot_delete_by_id_or_name(BlockDriverState *bs, > > -- > > 2.5.0 > > > > > > Reviewed-by: Fam Zheng >