From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57268) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UzOGM-0003uN-6m for qemu-devel@nongnu.org; Wed, 17 Jul 2013 05:43:12 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UzOGJ-0007uW-OP for qemu-devel@nongnu.org; Wed, 17 Jul 2013 05:43:10 -0400 Received: from mx1.redhat.com ([209.132.183.28]:47002) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UzOGJ-0007uI-8R for qemu-devel@nongnu.org; Wed, 17 Jul 2013 05:43:07 -0400 Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r6H9h6YC030266 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Wed, 17 Jul 2013 05:43:06 -0400 From: Fam Zheng Date: Wed, 17 Jul 2013 17:42:12 +0800 Message-Id: <1374054136-28741-8-git-send-email-famz@redhat.com> In-Reply-To: <1374054136-28741-1-git-send-email-famz@redhat.com> References: <1374054136-28741-1-git-send-email-famz@redhat.com> Subject: [Qemu-devel] [PATCH v2 07/11] block: hold hard reference for backup/mirror target List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kwolf@redhat.com, famz@redhat.com, hbrock@redhat.com, rjones@redhat.com, imain@redhat.com, stefanha@redhat.com, pbonzini@redhat.com Signed-off-by: Fam Zheng --- block/backup.c | 3 ++- block/mirror.c | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/block/backup.c b/block/backup.c index 16105d4..b82f601 100644 --- a/block/backup.c +++ b/block/backup.c @@ -294,7 +294,7 @@ static void coroutine_fn backup_run(void *opaque) hbitmap_free(job->bitmap); bdrv_iostatus_disable(target); - bdrv_delete(target); + bdrv_unref(target, true); block_job_completed(&job->common, ret); } @@ -332,6 +332,7 @@ void backup_start(BlockDriverState *bs, BlockDriverState *target, return; } + bdrv_ref(target, true); job->on_source_error = on_source_error; job->on_target_error = on_target_error; job->target = target; diff --git a/block/mirror.c b/block/mirror.c index bed4a7e..decdedb 100644 --- a/block/mirror.c +++ b/block/mirror.c @@ -479,8 +479,7 @@ immediate_exit: } bdrv_swap(s->target, s->common.bs); } - bdrv_close(s->target); - bdrv_delete(s->target); + bdrv_unref(s->target, true); block_job_completed(&s->common, ret); } @@ -574,6 +573,7 @@ void mirror_start(BlockDriverState *bs, BlockDriverState *target, s->granularity = granularity; s->buf_size = MAX(buf_size, granularity); + bdrv_ref(target, true); bdrv_set_dirty_tracking(bs, granularity); bdrv_set_enable_write_cache(s->target, true); bdrv_set_on_error(s->target, on_target_error, on_target_error); -- 1.8.3.2