From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:38672) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WmdB8-00060I-0c for qemu-devel@nongnu.org; Tue, 20 May 2014 02:05:40 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WmdB0-0001Qu-OO for qemu-devel@nongnu.org; Tue, 20 May 2014 02:05:33 -0400 Received: from mx1.redhat.com ([209.132.183.28]:10111) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WmdB0-0001Qi-Go for qemu-devel@nongnu.org; Tue, 20 May 2014 02:05:26 -0400 Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s4K65P5X015644 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Tue, 20 May 2014 02:05:25 -0400 From: Fam Zheng Date: Tue, 20 May 2014 14:04:35 +0800 Message-Id: <1400565880-13409-11-git-send-email-famz@redhat.com> In-Reply-To: <1400565880-13409-1-git-send-email-famz@redhat.com> References: <1400565880-13409-1-git-send-email-famz@redhat.com> Subject: [Qemu-devel] [PATCH v20 10/15] 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