summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMORITA Kazutaka <morita.kazutaka@lab.ntt.co.jp>2010-05-28 11:44:57 +0900
committerKevin Wolf <kwolf@redhat.com>2010-06-04 11:43:40 +0200
commit2bc93fed76c89f7adaa0e5bb357dcdc6c2b097a8 (patch)
tree5982353ed7064ff6459e897ff3305b644f5580c5
parent08a00559f00975cebcb3f844fe7c708d65b6a3b3 (diff)
downloadqemu-2bc93fed76c89f7adaa0e5bb357dcdc6c2b097a8.tar.gz
qemu-2bc93fed76c89f7adaa0e5bb357dcdc6c2b097a8.tar.bz2
qemu-2bc93fed76c89f7adaa0e5bb357dcdc6c2b097a8.zip
close all the block drivers before the qemu process exits
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 <morita.kazutaka@lab.ntt.co.jp> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
-rw-r--r--block.c9
-rw-r--r--block.h1
-rw-r--r--vl.c1
3 files changed, 11 insertions, 0 deletions
diff --git a/block.c b/block.c
index ecd98675a5..b1ef85c8da 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 756670d22f..25744b134f 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 2769d1a4bc..551138f0cc 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();
}