From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33546) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WjfAP-0003Gw-7X for qemu-devel@nongnu.org; Sun, 11 May 2014 21:36:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WjfAJ-0001BS-3L for qemu-devel@nongnu.org; Sun, 11 May 2014 21:36:33 -0400 Received: from mx1.redhat.com ([209.132.183.28]:26180) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WjfAI-0001BO-St for qemu-devel@nongnu.org; Sun, 11 May 2014 21:36:27 -0400 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s4C1aQlH027803 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Sun, 11 May 2014 21:36:26 -0400 From: Fam Zheng Date: Mon, 12 May 2014 09:35:50 +0800 Message-Id: <1399858555-9672-12-git-send-email-famz@redhat.com> In-Reply-To: <1399858555-9672-1-git-send-email-famz@redhat.com> References: <1399858555-9672-1-git-send-email-famz@redhat.com> Subject: [Qemu-devel] [PATCH v19 11/16] commit: Use bdrv_drop_intermediate List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kwolf@redhat.com, jcody@redhat.com, hbrock@redhat.com, rjones@redhat.com, armbru@redhat.com, imain@redhat.com, stefanha@redhat.com, pbonzini@redhat.com Signed-off-by: Fam Zheng --- block/mirror.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/block/mirror.c b/block/mirror.c index 6a53d79..b4b12d0 100644 --- a/block/mirror.c +++ b/block/mirror.c @@ -493,14 +493,10 @@ immediate_exit: if (bdrv_get_flags(s->target) != bdrv_get_flags(s->common.bs)) { bdrv_reopen(s->target, bdrv_get_flags(s->common.bs), NULL); } - bdrv_swap(s->target, s->common.bs); if (s->common.driver->job_type == BLOCK_JOB_TYPE_COMMIT) { - /* drop the bs loop chain formed by the swap: break the loop then - * trigger the unref from the top one */ - BlockDriverState *p = s->base->backing_hd; - s->base->backing_hd = NULL; - bdrv_op_unblock_all(p, s->base->backing_blocker); - bdrv_unref(p); + ret = bdrv_drop_intermediate(s->common.bs, s->common.bs, s->base); + } else { + bdrv_swap(s->target, s->common.bs); } } bdrv_unref(s->target); -- 1.9.2