[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH for-2.7 v2 00/17] block: Lock images when openin

From: Denis V. Lunev
Subject: Re: [Qemu-devel] [PATCH for-2.7 v2 00/17] block: Lock images when opening
Date: Sat, 16 Apr 2016 17:33:13 +0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.5.1

On 04/15/2016 06:27 AM, Fam Zheng wrote:
v2: Lock byte 1 in the image itself, no lock file. [Daniel]
     Fix migration (image are not locked in bdrv_open_common if
     BDRV_O_INACTIVE). [Denis]
     Simplify test case fixes because of the above.
     Add lock for RBD.
     Add "-L" option in "qemu-img" and "qemu-nbd" too. [Denis]
     Add test case for image locking.

Too many troubles have been caused by two processes writing to the same image
unexpectedly. This series introduces automatical image locking into QEMU to
avoid such tragedy. With this, the user won't be able to open the image from
two processes (e.g. using qemu-img when the image is attached to the guest).

Underneath is the fcntl syscall that locks the local file, similar to what is
already used in libvirt virtlockd. The difference is that libvirt locks byte 0,
we lock byte 1.  Read only openings are mapped to shared locks.

The alternative locking API, flock(2), cannot protect host NFS mount points, so
it's not used.

Gluster locking is also implemented wrapping glfs_posix_lock in patch 6. It's
only lightly tested.

All other drivers that don't implement .bdrv_lockf are always permissive and
does no checking.

In the future, the intention is that image format drivers that introduce
locking mechanisms could also fit into this API.

Fam Zheng (17):
   block: Add BDRV_O_NO_LOCK
   qapi: Add lock-image in blockdev-add options
   blockdev: Add and parse "lock-image" option for block devices
   block: Introduce image file locking
   raw-posix: Implement .bdrv_lockf
   gluster: Implement .bdrv_lockf
   rbd: Implement image locking
   qemu-io: Add "-L" option for BDRV_O_NO_LOCK
   qemu-img: Add "-L" option to sub commands
   qemu-img: Update documentation of "-L" option
   qemu-nbd: Add "--no-lock/-L" option
   qemu-iotests: 140: Disable image lock for qemu-io access
   qemu-iotests: 046: Move version detection out from verify_io
   qemu-iotests: Wait for QEMU processes before checking image in 091
   qemu-iotests: Disable image lock when checking test image
   block: Turn on image locking by default
   qemu-iotests: Add test case 152 for image locking

  block.c                    |  42 ++++++++
  block/gluster.c            |  30 ++++++
  block/raw-posix.c          |  35 +++++++
  block/rbd.c                |  25 +++++
  blockdev.c                 |   8 ++
  include/block/block.h      |   1 +
  include/block/block_int.h  |  12 +++
  qapi/block-core.json       |   6 +-
  qemu-img-cmds.hx           |  44 ++++-----
  qemu-img.c                 |  90 +++++++++++++----
  qemu-img.texi              |   3 +
  qemu-io.c                  |  22 ++++-
  qemu-nbd.c                 |   6 +-
  qemu-nbd.texi              |   2 +
  tests/qemu-iotests/030     |   2 +-
  tests/qemu-iotests/046     |  22 +++--
  tests/qemu-iotests/091     |   3 +
  tests/qemu-iotests/091.out |   1 +
  tests/qemu-iotests/140     |   2 +-
  tests/qemu-iotests/152     | 106 ++++++++++++++++++++
  tests/qemu-iotests/152.out | 237 +++++++++++++++++++++++++++++++++++++++++++++
  tests/qemu-iotests/group   |   1 +
  22 files changed, 645 insertions(+), 55 deletions(-)
  create mode 100755 tests/qemu-iotests/152
  create mode 100644 tests/qemu-iotests/152.out

done for now...

reply via email to

[Prev in Thread] Current Thread [Next in Thread]