[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v4 4/5] block: add flush callback
From: |
Pavel Dovgalyuk |
Subject: |
[Qemu-devel] [PATCH v4 4/5] block: add flush callback |
Date: |
Thu, 10 Mar 2016 14:56:15 +0300 |
User-agent: |
StGit/0.16 |
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>
---
block/io.c | 7 +++++++
include/block/block_int.h | 7 +++++++
2 files changed, 14 insertions(+), 0 deletions(-)
diff --git a/block/io.c b/block/io.c
index a69bfc4..242ee0c 100644
--- a/block/io.c
+++ b/block/io.c
@@ -2369,6 +2369,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 9ef823a..8f72037 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()).
*/
[Qemu-devel] [PATCH v4 4/5] block: add flush callback,
Pavel Dovgalyuk <=
[Qemu-devel] [PATCH v4 5/5] replay: introduce block devices record/replay, Pavel Dovgalyuk, 2016/03/10