[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 21/48] block: add flush callback
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [PULL 21/48] block: add flush callback |
Date: |
Tue, 29 Mar 2016 17:08:21 +0200 |
From: Pavel Dovgalyuk <address@hidden>
This patch adds callback for flush request. This callback is responsible
for flushing whole block devices stack. bdrv_flush function does not
proceed to underlying devices. It should be performed by this callback
function, if needed.
Signed-off-by: Pavel Dovgalyuk <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>
---
block/io.c | 7 +++++++
include/block/block_int.h | 7 +++++++
2 files changed, 14 insertions(+)
diff --git a/block/io.c b/block/io.c
index bfc8592..c447db2 100644
--- a/block/io.c
+++ b/block/io.c
@@ -2331,6 +2331,13 @@ int coroutine_fn bdrv_co_flush(BlockDriverState *bs)
}
tracked_request_begin(&req, bs, 0, 0, BDRV_TRACKED_FLUSH);
+
+ /* Write back all layers by calling one driver function */
+ if (bs->drv->bdrv_co_flush) {
+ ret = bs->drv->bdrv_co_flush(bs);
+ goto out;
+ }
+
/* Write back cached data to the OS even with cache=unsafe */
BLKDBG_EVENT(bs->file, BLKDBG_FLUSH_TO_OS);
if (bs->drv->bdrv_co_flush_to_os) {
diff --git a/include/block/block_int.h b/include/block/block_int.h
index a33b0de..1177c25 100644
--- a/include/block/block_int.h
+++ b/include/block/block_int.h
@@ -176,6 +176,13 @@ struct BlockDriver {
int (*bdrv_inactivate)(BlockDriverState *bs);
/*
+ * Flushes all data for all layers by calling bdrv_co_flush for underlying
+ * layers, if needed. This function is needed for deterministic
+ * synchronization of the flush finishing callback.
+ */
+ int coroutine_fn (*bdrv_co_flush)(BlockDriverState *bs);
+
+ /*
* Flushes all data that was already written to the OS all the way down to
* the disk (for example raw-posix calls fsync()).
*/
--
1.8.3.1
- [Qemu-devel] [PULL 10/48] block/qapi: fix unbounded stack for dump_qdict, (continued)
- [Qemu-devel] [PULL 10/48] block/qapi: fix unbounded stack for dump_qdict, Kevin Wolf, 2016/03/29
- [Qemu-devel] [PULL 14/48] qemu-img/qemu-io: don't prompt for passwords if not required, Kevin Wolf, 2016/03/29
- [Qemu-devel] [PULL 12/48] block/qapi: Pass bdrv_query_blk_stats() s->stats, Kevin Wolf, 2016/03/29
- [Qemu-devel] [PULL 13/48] block: add flag to indicate that no I/O will be performed, Kevin Wolf, 2016/03/29
- [Qemu-devel] [PULL 15/48] tests: redirect stderr to stdout for iotests, Kevin Wolf, 2016/03/29
- [Qemu-devel] [PULL 16/48] tests: refactor python I/O tests helper main method, Kevin Wolf, 2016/03/29
- [Qemu-devel] [PULL 17/48] tests: add output filter to python I/O tests helper, Kevin Wolf, 2016/03/29
- [Qemu-devel] [PULL 18/48] block: add generic full disk encryption driver, Kevin Wolf, 2016/03/29
- [Qemu-devel] [PULL 23/48] replay: fix error message, Kevin Wolf, 2016/03/29
- [Qemu-devel] [PULL 19/48] block: move encryption deprecation warning into qcow code, Kevin Wolf, 2016/03/29
- [Qemu-devel] [PULL 21/48] block: add flush callback,
Kevin Wolf <=
- [Qemu-devel] [PULL 25/48] block: Add bdrv_parse_cache_mode(), Kevin Wolf, 2016/03/29
- [Qemu-devel] [PULL 22/48] replay: bh scheduling fix, Kevin Wolf, 2016/03/29
- [Qemu-devel] [PULL 26/48] qemu-nbd: Call blk_set_enable_write_cache() explicitly, Kevin Wolf, 2016/03/29
- [Qemu-devel] [PULL 28/48] qemu-img: Expand all BDRV_O_FLAGS uses, Kevin Wolf, 2016/03/29
- [Qemu-devel] [PULL 29/48] qemu-img: Call blk_set_enable_write_cache() explicitly, Kevin Wolf, 2016/03/29
- [Qemu-devel] [PULL 27/48] qemu-io: Call blk_set_enable_write_cache() explicitly, Kevin Wolf, 2016/03/29
- [Qemu-devel] [PULL 24/48] replay: introduce block devices record/replay, Kevin Wolf, 2016/03/29
- [Qemu-devel] [PULL 30/48] xen_disk: Call blk_set_enable_write_cache() explicitly, Kevin Wolf, 2016/03/29
- [Qemu-devel] [PULL 33/48] block: Handle flush error in bdrv_pwrite_sync(), Kevin Wolf, 2016/03/29
- [Qemu-devel] [PULL 31/48] block: blockdev_init(): Call blk_set_enable_write_cache() explicitly, Kevin Wolf, 2016/03/29