[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v5 4/7] block: add flush callback
From: |
Pavel Dovgalyuk |
Subject: |
[Qemu-devel] [PATCH v5 4/7] block: add flush callback |
Date: |
Mon, 14 Mar 2016 10:44:53 +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 v5 0/7] Deterministic replay extensions, Pavel Dovgalyuk, 2016/03/14
- [Qemu-devel] [PATCH v5 1/7] replay: character devices, Pavel Dovgalyuk, 2016/03/14
- [Qemu-devel] [PATCH v5 2/7] icount: remove obsolete warp call, Pavel Dovgalyuk, 2016/03/14
- [Qemu-devel] [PATCH v5 3/7] icount: decouple warp calls, Pavel Dovgalyuk, 2016/03/14
- [Qemu-devel] [PATCH v5 4/7] block: add flush callback,
Pavel Dovgalyuk <=
- [Qemu-devel] [PATCH v5 5/7] replay: bh scheduling fix, Pavel Dovgalyuk, 2016/03/14
- [Qemu-devel] [PATCH v5 6/7] replay: fix error message, Pavel Dovgalyuk, 2016/03/14
- [Qemu-devel] [PATCH v5 7/7] replay: introduce block devices record/replay, Pavel Dovgalyuk, 2016/03/14
- Re: [Qemu-devel] [PATCH v5 0/7] Deterministic replay extensions, Igor R, 2016/03/15
- Re: [Qemu-devel] [PATCH v5 0/7] Deterministic replay extensions, Kevin Wolf, 2016/03/24