[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 00/10] qcow2: Implement image locking
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [PATCH 00/10] qcow2: Implement image locking |
Date: |
Tue, 22 Dec 2015 17:46:16 +0100 |
Enough innocent images have died because users called 'qemu-img snapshot' while
the VM was still running. Educating the users doesn't seem to be a working
strategy, so this series adds locking to qcow2 that refuses to access the image
read-write from two processes.
Eric, this will require a libvirt update to deal with qemu crashes which leave
locked images behind. The simplest thinkable way would be to unconditionally
override the lock in libvirt whenever the option is present. In that case,
libvirt VMs would be protected against concurrent non-libvirt accesses, but not
the other way round. If you want more than that, libvirt would have to check
somehow if it was its own VM that used the image and left the lock behind. I
imagine that can't be too hard either.
Also note that this kind of depends on Max's bdrv_close_all() series, but only
in order to pass test case 142. This is not a bug in this series, but a
preexisting one (bs->file can be closed before bs), and it becomes apparent
when qemu fails to unlock an image due to this bug. Max's series fixes this.
Kevin Wolf (10):
qcow2: Write feature table only for v3 images
qcow2: Write full header on image creation
block: Assert no write requests under BDRV_O_INCOMING
block: Fix error path in bdrv_invalidate_cache()
block: Inactivate BDS when migration completes
qemu-img: Prepare for locked images
qcow2: Implement .bdrv_inactivate
qcow2: Fix BDRV_O_INCOMING handling in qcow2_invalidate_cache()
qcow2: Make image inaccessible after failed qcow2_invalidate_cache()
qcow2: Add image locking
block.c | 36 +++++++++
block/io.c | 2 +
block/qcow2.c | 190 +++++++++++++++++++++++++++++++++++----------
block/qcow2.h | 7 +-
docs/specs/qcow2.txt | 7 +-
include/block/block.h | 2 +
include/block/block_int.h | 1 +
include/qapi/error.h | 1 +
migration/migration.c | 7 ++
qapi/common.json | 3 +-
qemu-img-cmds.hx | 10 ++-
qemu-img.c | 96 +++++++++++++++++++----
qemu-img.texi | 20 ++++-
qmp.c | 12 +++
tests/qemu-iotests/026 | 2 +-
tests/qemu-iotests/026.out | 60 ++++++++++++--
tests/qemu-iotests/031.out | 23 +++---
tests/qemu-iotests/036 | 2 +
tests/qemu-iotests/036.out | 7 +-
tests/qemu-iotests/039 | 4 +-
tests/qemu-iotests/061 | 2 +
tests/qemu-iotests/061.out | 43 +++++-----
tests/qemu-iotests/071 | 7 ++
tests/qemu-iotests/071.out | 4 +
tests/qemu-iotests/089 | 2 +-
tests/qemu-iotests/089.out | 2 -
tests/qemu-iotests/091 | 2 +-
tests/qemu-iotests/098 | 2 +-
28 files changed, 445 insertions(+), 111 deletions(-)
--
1.8.3.1
- [Qemu-devel] [PATCH 00/10] qcow2: Implement image locking,
Kevin Wolf <=
- [Qemu-devel] [PATCH 01/10] qcow2: Write feature table only for v3 images, Kevin Wolf, 2015/12/22
- [Qemu-devel] [PATCH 03/10] block: Assert no write requests under BDRV_O_INCOMING, Kevin Wolf, 2015/12/22
- [Qemu-devel] [PATCH 02/10] qcow2: Write full header on image creation, Kevin Wolf, 2015/12/22
- [Qemu-devel] [PATCH 04/10] block: Fix error path in bdrv_invalidate_cache(), Kevin Wolf, 2015/12/22
- [Qemu-devel] [PATCH 05/10] block: Inactivate BDS when migration completes, Kevin Wolf, 2015/12/22