[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 28/48] block: Add blk_remove_all_bs()
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [PULL 28/48] block: Add blk_remove_all_bs() |
Date: |
Fri, 29 Jan 2016 18:37:34 +0100 |
From: Max Reitz <address@hidden>
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>
Signed-off-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);
--
1.8.3.1
- [Qemu-devel] [PULL 26/48] block: Add list of all BlockDriverStates, (continued)
- [Qemu-devel] [PULL 26/48] block: Add list of all BlockDriverStates, Kevin Wolf, 2016/01/29
- [Qemu-devel] [PULL 34/48] qcow: Assign bs->file->bs to file in qcow_co_get_block_status, Kevin Wolf, 2016/01/29
- [Qemu-devel] [PULL 37/48] iscsi: Assign bs to file in iscsi_co_get_block_status, Kevin Wolf, 2016/01/29
- [Qemu-devel] [PULL 39/48] qed: Assign bs->file->bs to file in bdrv_qed_co_get_block_status, Kevin Wolf, 2016/01/29
- [Qemu-devel] [PULL 32/48] block: acquire in bdrv_query_image_info, Kevin Wolf, 2016/01/29
- [Qemu-devel] [PULL 35/48] qcow2: Assign bs->file->bs to file in qcow2_co_get_block_status, Kevin Wolf, 2016/01/29
- [Qemu-devel] [PULL 29/48] block: Rewrite bdrv_close_all(), Kevin Wolf, 2016/01/29
- [Qemu-devel] [PULL 27/48] blockdev: Keep track of monitor-owned BDS, Kevin Wolf, 2016/01/29
- [Qemu-devel] [PULL 36/48] raw: Assign bs to file in raw_co_get_block_status, Kevin Wolf, 2016/01/29
- [Qemu-devel] [PULL 41/48] vdi: Assign bs->file->bs to file in vdi_co_get_block_status, Kevin Wolf, 2016/01/29
- [Qemu-devel] [PULL 28/48] block: Add blk_remove_all_bs(),
Kevin Wolf <=
- [Qemu-devel] [PULL 40/48] sheepdog: Assign bs to file in sd_co_get_block_status, Kevin Wolf, 2016/01/29
- [Qemu-devel] [PULL 38/48] parallels: Assign bs->file->bs to file in parallels_co_get_block_status, Kevin Wolf, 2016/01/29
- [Qemu-devel] [PULL 42/48] vpc: Assign bs->file->bs to file in vpc_co_get_block_status, Kevin Wolf, 2016/01/29
- [Qemu-devel] [PULL 44/48] vmdk: Return extent's file in bdrv_get_block_status, Kevin Wolf, 2016/01/29
- [Qemu-devel] [PULL 33/48] block: Add "file" output parameter to block status query functions, Kevin Wolf, 2016/01/29
- [Qemu-devel] [PULL 31/48] iotests: Add test for block jobs and BDS ejection, Kevin Wolf, 2016/01/29
- [Qemu-devel] [PULL 47/48] qemu-img: Make MapEntry a QAPI struct, Kevin Wolf, 2016/01/29
- [Qemu-devel] [PULL 43/48] vmdk: Fix calculation of block status's offset, Kevin Wolf, 2016/01/29
- [Qemu-devel] [PULL 46/48] qemu-img: In "map", use the returned "file" from bdrv_get_block_status, Kevin Wolf, 2016/01/29
- [Qemu-devel] [PULL 48/48] iotests: Add "qemu-img map" test for VMDK extents, Kevin Wolf, 2016/01/29