On Fri, 12/02 03:58, Max Reitz wrote: > On 31.10.2016 16:38, Fam Zheng wrote: > > This implements open flag sensible image locking for local file > > and host device protocol. > > > > virtlockd in libvirt locks the first byte, so we start looking at the > > file bytes from 1. > > > > Quoting what was proposed by Kevin Wolf <kw...@redhat.com>, there are > > four locking modes by combining two bits (BDRV_O_RDWR and > > BDRV_O_SHARE_RW), and implemented by taking two locks: > > > > Lock bytes: > > > > * byte 1: I can't allow other processes to write to the image > > * byte 2: I am writing to the image > > > > Lock modes: > > > > * shared writer (BDRV_O_RDWR | BDRV_O_SHARE_RW): Take shared lock on > > byte 2. Test whether byte 1 is locked using an exclusive lock, and > > fail if so. > > Testing whether something is locked would be easier by using F_OFD_GETLK > instead of actually creating an exclusive lock and then releasing it.
My attempt to do this shows it doesn't work: fcntl forces the tested lock type to read lock for some unknown reason, so it cannot be used to test other shared lockers.