From patchwork Wed May 12 10:46:52 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: MORITA Kazutaka X-Patchwork-Id: 52376 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) by ozlabs.org (Postfix) with ESMTP id 3F0ADB7E05 for ; Wed, 12 May 2010 20:51:18 +1000 (EST) Received: from localhost ([127.0.0.1]:35923 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OC9NC-0000BS-Vh for incoming@patchwork.ozlabs.org; Wed, 12 May 2010 06:41:07 -0400 Received: from [140.186.70.92] (port=51826 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OC9L9-0007tS-54 for qemu-devel@nongnu.org; Wed, 12 May 2010 06:39:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OC9L4-0001DJ-Sd for qemu-devel@nongnu.org; Wed, 12 May 2010 06:38:58 -0400 Received: from sh.osrg.net ([192.16.179.4]:48778) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OC9L4-0001Av-DT for qemu-devel@nongnu.org; Wed, 12 May 2010 06:38:54 -0400 Received: from fs.osrg.net (postfix@fs.osrg.net [10.0.0.12]) by sh.osrg.net (8.14.3/8.14.3/OSRG-NET) with ESMTP id o4CAcIZM012963; Wed, 12 May 2010 19:38:19 +0900 Received: from localhost (dfs1401.osrg.net [10.68.14.1]) by fs.osrg.net (Postfix) with ESMTP id EE0801B8001; Wed, 12 May 2010 19:38:18 +0900 (JST) From: MORITA Kazutaka To: aliguori@us.ibm.com, avi@redhat.com Date: Wed, 12 May 2010 19:46:52 +0900 Message-Id: <1273661213-19611-2-git-send-email-morita.kazutaka@lab.ntt.co.jp> X-Mailer: git-send-email 1.5.6.5 In-Reply-To: <1273661213-19611-1-git-send-email-morita.kazutaka@lab.ntt.co.jp> References: <1273661213-19611-1-git-send-email-morita.kazutaka@lab.ntt.co.jp> X-Dispatcher: imput version 20070423(IM149) Lines: 75 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-3.0 (sh.osrg.net [192.16.179.4]); Wed, 12 May 2010 19:38:20 +0900 (JST) X-Virus-Scanned: clamav-milter 0.96 at sh X-Virus-Status: Clean X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) Cc: fujita.tomonori@lab.ntt.co.jp, sheepdog@lists.wpkg.org, qemu-devel@nongnu.org, kvm@vger.kernel.org Subject: [Qemu-devel] [RFC PATCH 1/2] close all the block drivers before the qemu process exits X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org 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 --- block.c | 11 +++++++++++ block.h | 1 + monitor.c | 1 + vl.c | 1 + 4 files changed, 14 insertions(+), 0 deletions(-) diff --git a/block.c b/block.c index 7326bfe..a606820 100644 --- a/block.c +++ b/block.c @@ -526,6 +526,17 @@ void bdrv_close(BlockDriverState *bs) } } +void bdrv_close_all(void) +{ + BlockDriverState *bs, *n; + + for (bs = bdrv_first, n = bs->next; bs; bs = n, n = bs ? bs->next : NULL) { + if (bs && bs->drv && bs->drv->bdrv_close) { + bs->drv->bdrv_close(bs); + } + } +} + void bdrv_delete(BlockDriverState *bs) { BlockDriverState **pbs; diff --git a/block.h b/block.h index fa51ddf..1a1293a 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_is_allocated(BlockDriverState *bs, int64_t sector_num, int nb_sectors, int *pnum); diff --git a/monitor.c b/monitor.c index 17e59f5..44bfe83 100644 --- a/monitor.c +++ b/monitor.c @@ -845,6 +845,7 @@ static void do_info_cpu_stats(Monitor *mon) */ static void do_quit(Monitor *mon, const QDict *qdict, QObject **ret_data) { + bdrv_close_all(); exit(0); } diff --git a/vl.c b/vl.c index 77677e8..65160ed 100644 --- a/vl.c +++ b/vl.c @@ -4205,6 +4205,7 @@ static void main_loop(void) vm_stop(r); } } + bdrv_close_all(); pause_all_vcpus(); }