[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