[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v9 13/16] block: Add blk_remove_all_bs()
From: |
Max Reitz |
Subject: |
[Qemu-devel] [PATCH v9 13/16] block: Add blk_remove_all_bs() |
Date: |
Fri, 29 Jan 2016 16:36:13 +0100 |
When bdrv_close_all() is called, instead of force-closing all root
BlockDriverStates, it is better to just drop the reference from all
BlockBackends and let them be closed automatically. This prevents BDS
from getting closed that are still referenced by other BDS, which may
result in loss of cached data.
This patch adds a function for doing that, but does not yet incorporate
it in bdrv_close_all().
Signed-off-by: Max Reitz <address@hidden>
Reviewed-by: Kevin Wolf <address@hidden>
---
block/block-backend.c | 15 +++++++++++++++
include/sysemu/block-backend.h | 1 +
2 files changed, 16 insertions(+)
diff --git a/block/block-backend.c b/block/block-backend.c
index 7f5ad59..ebdf78a 100644
--- a/block/block-backend.c
+++ b/block/block-backend.c
@@ -223,6 +223,21 @@ void blk_unref(BlockBackend *blk)
}
}
+void blk_remove_all_bs(void)
+{
+ BlockBackend *blk;
+
+ QTAILQ_FOREACH(blk, &blk_backends, link) {
+ AioContext *ctx = blk_get_aio_context(blk);
+
+ aio_context_acquire(ctx);
+ if (blk->bs) {
+ blk_remove_bs(blk);
+ }
+ aio_context_release(ctx);
+ }
+}
+
/*
* Return the BlockBackend after @blk.
* If @blk is null, return the first one.
diff --git a/include/sysemu/block-backend.h b/include/sysemu/block-backend.h
index ae4efb4..ec30331 100644
--- a/include/sysemu/block-backend.h
+++ b/include/sysemu/block-backend.h
@@ -68,6 +68,7 @@ BlockBackend *blk_new_open(const char *name, const char
*filename,
int blk_get_refcnt(BlockBackend *blk);
void blk_ref(BlockBackend *blk);
void blk_unref(BlockBackend *blk);
+void blk_remove_all_bs(void);
const char *blk_name(BlockBackend *blk);
BlockBackend *blk_by_name(const char *name);
BlockBackend *blk_next(BlockBackend *blk);
--
2.7.0
- [Qemu-devel] [PATCH v9 01/16] block: Release named dirty bitmaps in bdrv_close(), (continued)
- [Qemu-devel] [PATCH v9 01/16] block: Release named dirty bitmaps in bdrv_close(), Max Reitz, 2016/01/29
- [Qemu-devel] [PATCH v9 04/16] virtio-blk: Functions for op blocker management, Max Reitz, 2016/01/29
- [Qemu-devel] [PATCH v9 03/16] block: Add BB-BDS remove/insert notifiers, Max Reitz, 2016/01/29
- [Qemu-devel] [PATCH v9 02/16] iotests: Add test for eject under NBD server, Max Reitz, 2016/01/29
- [Qemu-devel] [PATCH v9 05/16] virtio-scsi: Catch BDS-BB removal/insertion, Max Reitz, 2016/01/29
- [Qemu-devel] [PATCH v9 06/16] nbd: Switch from close to eject notifier, Max Reitz, 2016/01/29
- [Qemu-devel] [PATCH v9 07/16] block: Remove BDS close notifier, Max Reitz, 2016/01/29
- [Qemu-devel] [PATCH v9 08/16] block: Use blk_remove_bs() in blk_delete(), Max Reitz, 2016/01/29
- [Qemu-devel] [PATCH v9 09/16] blockdev: Use blk_remove_bs() in do_drive_del(), Max Reitz, 2016/01/29
- [Qemu-devel] [PATCH v9 11/16] block: Add list of all BlockDriverStates, Max Reitz, 2016/01/29
- [Qemu-devel] [PATCH v9 13/16] block: Add blk_remove_all_bs(),
Max Reitz <=
- [Qemu-devel] [PATCH v9 10/16] block: Make bdrv_close() static, Max Reitz, 2016/01/29
- [Qemu-devel] [PATCH v9 14/16] block: Rewrite bdrv_close_all(), Max Reitz, 2016/01/29
- [Qemu-devel] [PATCH v9 12/16] blockdev: Keep track of monitor-owned BDS, Max Reitz, 2016/01/29
- [Qemu-devel] [PATCH v9 15/16] iotests: Add test for multiple BB on BDS tree, Max Reitz, 2016/01/29
- [Qemu-devel] [PATCH v9 16/16] iotests: Add test for block jobs and BDS ejection, Max Reitz, 2016/01/29