From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56303) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WY52L-000443-1I for qemu-devel@nongnu.org; Wed, 09 Apr 2014 22:48:27 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WY52E-000764-Sq for qemu-devel@nongnu.org; Wed, 09 Apr 2014 22:48:20 -0400 Received: from mx1.redhat.com ([209.132.183.28]:34263) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WY52E-00075z-LY for qemu-devel@nongnu.org; Wed, 09 Apr 2014 22:48:14 -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 s3A2mEnQ012693 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Wed, 9 Apr 2014 22:48:14 -0400 From: Fam Zheng Date: Thu, 10 Apr 2014 10:47:11 +0800 Message-Id: <1397098036-20605-11-git-send-email-famz@redhat.com> In-Reply-To: <1397098036-20605-1-git-send-email-famz@redhat.com> References: <1397098036-20605-1-git-send-email-famz@redhat.com> Subject: [Qemu-devel] [PATCH v18 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, 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 22ec5be..c3d819e 100644 --- a/block/mirror.c +++ b/block/mirror.c @@ -490,14 +490,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.1