[libvirt] Use flock() instead of fcntl()

David Weber wb at munzinger.de
Thu Jul 25 10:07:44 UTC 2013


Thank you for your quick response!

Am Donnerstag, 25. Juli 2013, 10:31:40 schrieb Daniel P. Berrange:
> On Thu, Jul 25, 2013 at 08:23:24AM +0000, David Weber wrote:
> > Hi,
> > 
> > we are interested in using virtlockd on an OCFS2 shared filesystem.
> > We are now facing the problem that virtlockd uses fcntl() locks which
> > aren't supported by OCFS2 with the o2cb cluster stack and we want
> > to avoid using indirect leases.
> > 
> > OCFS2 instead supports flock() which is quite similar to fcntl(). I
> > attached a patch which makes libvirt use flock() *instead* of fcntl()
> > and it seems to work.
> > 
> > NFS on the contrast only supports fcntl() so it should be configurable
> > which lock type to use.
> > 
> > I'm not very experienced with locking, so would such a patch be
> > acceptable or do you see possible problems with it?
> 
> We definitely can't use flock() unconditionally like that, as it is
> less widely supported than fcntl() locking and is known broken on
> most network filesystems (flock() will only lock wrt the local node,
> not network-wide).

flock() locks are cluster aware in recent versions of OCFS2 and I would try to 
make it configurable which lock type to use.

> 
> I'm pretty surprised that you can fcntl() is not supported in ocfs2.
> Are you really sure about that ?
> 
> This mail message suggests it is supported
> 
>   https://oss.oracle.com/pipermail/ocfs2-users/2009-June/003572.html
> 
> "Support for fcntl locking aka file-range locking aka posix locking is
>  provided by vfs for all file systems. However, that support is appropriate
>  only for local file systems.
> 
>  In ocfs2, we have added support for cluster-aware fcntl locking via
>  the userspace clustering framework that allows one to use ocfs2 with
>  different cluster-stacks."

OCFS2 supports fcntl() only with the userspace cluster stacks (pacemaker and 
cman) which we want to avoid.

SUSE advises to use indirect leases which we also want to avoid:
https://www.suse.com/documentation//sled11/book_kvm/?page=/documentation//sled11/book_kvm/data/sec_libvirt_storage_locking.html

"virtlockd's default configuration does not allow you to lock disk files placed 
on a shared file system (for example NFS or OCFS2). Locking on these file 
systems requires you to specify a lockspace directory on the VM Host Server by 
setting"

Although that's not completely correct because NFS supports fcntl()

Cheers,
David
> 
> Regards,
> Daniel




More information about the libvir-list mailing list