From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=52862 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OKaps-0005aR-2w for qemu-devel@nongnu.org; Fri, 04 Jun 2010 13:37:38 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OKapd-0002lZ-PC for qemu-devel@nongnu.org; Fri, 04 Jun 2010 13:37:29 -0400 Received: from mx1.redhat.com ([209.132.183.28]:46924) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OKapd-0002l5-Gn for qemu-devel@nongnu.org; Fri, 04 Jun 2010 13:37:21 -0400 From: Kevin Wolf Date: Fri, 4 Jun 2010 18:33:10 +0200 Message-Id: <1275669195-28312-23-git-send-email-kwolf@redhat.com> In-Reply-To: <1275669195-28312-1-git-send-email-kwolf@redhat.com> References: <1275669195-28312-1-git-send-email-kwolf@redhat.com> Subject: [Qemu-devel] [PATCH 22/27] close all the block drivers before the qemu process exits List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: anthony@codemonkey.ws Cc: kwolf@redhat.com, qemu-devel@nongnu.org From: MORITA Kazutaka This patch calls the close handler of the block driver before the qemu process exits. This is necessary because the sheepdog block driver releases the lock of VM images in the close handler. Signed-off-by: MORITA Kazutaka Signed-off-by: Kevin Wolf --- block.c | 9 +++++++++ block.h | 1 + vl.c | 1 + 3 files changed, 11 insertions(+), 0 deletions(-) diff --git a/block.c b/block.c index ecd9867..b1ef85c 100644 --- a/block.c +++ b/block.c @@ -648,6 +648,15 @@ void bdrv_close(BlockDriverState *bs) } } +void bdrv_close_all(void) +{ + BlockDriverState *bs; + + QTAILQ_FOREACH(bs, &bdrv_states, list) { + bdrv_close(bs); + } +} + void bdrv_delete(BlockDriverState *bs) { /* remove from list, if necessary */ diff --git a/block.h b/block.h index 756670d..25744b1 100644 --- a/block.h +++ b/block.h @@ -123,6 +123,7 @@ BlockDriverAIOCB *bdrv_aio_ioctl(BlockDriverState *bs, /* Ensure contents are flushed to disk. */ void bdrv_flush(BlockDriverState *bs); void bdrv_flush_all(void); +void bdrv_close_all(void); int bdrv_has_zero_init(BlockDriverState *bs); int bdrv_is_allocated(BlockDriverState *bs, int64_t sector_num, int nb_sectors, diff --git a/vl.c b/vl.c index 2769d1a..551138f 100644 --- a/vl.c +++ b/vl.c @@ -1991,6 +1991,7 @@ static void main_loop(void) vm_stop(r); } } + bdrv_close_all(); pause_all_vcpus(); } -- 1.6.6.1