From: Lukas Straub Date: Tue, 18 May 2021 11:42:14 +0000 (+0200) Subject: block/quorum: Provide .bdrv_co_flush instead of .bdrv_co_flush_to_disk X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=5529b02da2dcd1ef6bc6cd42d4fbfb537fe2276f;p=qmiga%2Fqemu.git block/quorum: Provide .bdrv_co_flush instead of .bdrv_co_flush_to_disk The quorum block driver uses a custom flush callback to handle the case when some children return io errors. In that case it still returns success if enough children are healthy. However, it provides it as the .bdrv_co_flush_to_disk callback, not as .bdrv_co_flush. This causes the block layer to do it's own generic flushing for the children instead, which doesn't handle errors properly. Fix this by providing .bdrv_co_flush instead of .bdrv_co_flush_to_disk so the block layer uses the custom flush callback. Signed-off-by: Lukas Straub Reported-by: Minghao Yuan Message-Id: <20210518134214.11ccf05f@gecko.fritz.box> Tested-by: Zhang Chen Signed-off-by: Kevin Wolf --- diff --git a/block/quorum.c b/block/quorum.c index cfc1436abb..f2c0805000 100644 --- a/block/quorum.c +++ b/block/quorum.c @@ -1279,7 +1279,7 @@ static BlockDriver bdrv_quorum = { .bdrv_dirname = quorum_dirname, .bdrv_co_block_status = quorum_co_block_status, - .bdrv_co_flush_to_disk = quorum_co_flush, + .bdrv_co_flush = quorum_co_flush, .bdrv_getlength = quorum_getlength,