On Sun, 04/17 20:27, Richard W.M. Jones wrote: > On Fri, Apr 15, 2016 at 11:27:55AM +0800, Fam Zheng wrote: > > virtlockd in libvirt locks the first byte, we lock byte 1 to avoid > > the intervene. > > +static int raw_lockf(BlockDriverState *bs, BdrvLockfCmd cmd) > > +{ > > + > > + BDRVRawState *s = bs->opaque; > > + int ret; > > + struct flock fl = (struct flock) { > > + .l_whence = SEEK_SET, > > + /* Locking byte 1 avoids interfereing with virtlockd. */ > > + .l_start = 1, > > + .l_len = 1, > > + }; > > + > > + switch (cmd) { > > + case BDRV_LOCKF_RWLOCK: > > + fl.l_type = F_WRLCK; > > + break; > > + case BDRV_LOCKF_ROLOCK: > > + fl.l_type = F_RDLCK; > > + break; > > + case BDRV_LOCKF_UNLOCK: > > + fl.l_type = F_UNLCK; > > + break; > > My understanding is this prevents libguestfs from working on live disk > images -- we want to be able to read live disk images (using a > writable overlay and the real disk image as a read-only backing file).
Do you lock the live image or the backing file? If not, you can just read/write as before, as what the -L option does in this series. Otherwise, you should use an RO lock on the backing image, which still works. Fam