Writing to the same qcow2 file from two QEMU processes at the same time will never work correctly, so disable it even when the caller specifies BDRV_O_RDWR.
Other formats are less vulnerable because they don't have internal snapshots thus qemu-img is less often misused to create live snapshot. Signed-off-by: Fam Zheng <f...@redhat.com> --- block/qcow2.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/block/qcow2.c b/block/qcow2.c index 96fb8a8..879361a 100644 --- a/block/qcow2.c +++ b/block/qcow2.c @@ -1177,6 +1177,17 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, } } + if ((flags & BDRV_O_SHARE_RW) && (flags & BDRV_O_RDWR)) { + /* Shared write is never a good idea for qcow2, override it. + * XXX: Use permission propagation and masking mechanism in op blockers + * API once it's there. */ + ret = bdrv_reopen(bs->file->bs, flags & ~BDRV_O_SHARE_RW, &local_err); + if (ret) { + error_propagate(errp, local_err); + goto fail; + } + } + #ifdef DEBUG_ALLOC { BdrvCheckResult result = {0}; -- 2.9.3