]> git.proxmox.com Git - qemu.git/blobdiff - block.c
block: Introduce bdrv_co_flush_to_os
[qemu.git] / block.c
diff --git a/block.c b/block.c
index 5c30c9dd68ce917f90d27279f9df477a0b3e6660..b1a462956ff8c9a157b92b898e8746a8edec7454 100644 (file)
--- a/block.c
+++ b/block.c
@@ -2789,12 +2789,23 @@ static void coroutine_fn bdrv_flush_co_entry(void *opaque)
 
 int coroutine_fn bdrv_co_flush(BlockDriverState *bs)
 {
+    int ret;
+
     if (bs->open_flags & BDRV_O_NO_FLUSH) {
         return 0;
     } else if (!bs->drv) {
         return 0;
-    } else if (bs->drv->bdrv_co_flush) {
-        return bs->drv->bdrv_co_flush(bs);
+    }
+
+    if (bs->drv->bdrv_co_flush_to_os) {
+        ret = bs->drv->bdrv_co_flush_to_os(bs);
+        if (ret < 0) {
+            return ret;
+        }
+    }
+
+    if (bs->drv->bdrv_co_flush_to_disk) {
+        return bs->drv->bdrv_co_flush_to_disk(bs);
     } else if (bs->drv->bdrv_aio_flush) {
         BlockDriverAIOCB *acb;
         CoroutineIOCompletion co = {