Summary: | [nfs] nfs locking/rpc.lockd doesn't understand file descriptor sharing | ||
---|---|---|---|
Product: | Base System | Reporter: | Kris Kennaway <kris> |
Component: | kern | Assignee: | dfr |
Status: | Closed FIXED | ||
Severity: | Affects Only Me | ||
Priority: | Normal | ||
Version: | 6.0-STABLE | ||
Hardware: | Any | ||
OS: | Any |
Description
Kris Kennaway
![]() ![]() Responsible Changed From-To: freebsd-bugs->cel Responsible Changed From-To: cel->freebsd-bugs Back to the public pool. I'm a little confused here. >For example, a process may lock a file, fork, and >the child process inherits the file descriptor table and may >legitimately unlock the file. Uh, no: "File locks set by the parent process are not inherited by the child process." (http://www.opengroup.org/onlinepubs/007908799/xsh/fork.html) Zachary Loafman wrote:
> I'm a little confused here.
>
> >For example, a process may lock a file, fork, and
> >the child process inherits the file descriptor table and may
> >legitimately unlock the file.
>
> Uh, no:
>
> "File locks set by the parent process are not inherited by the child
> process." (http://www.opengroup.org/onlinepubs/007908799/xsh/fork.html)
Well FreeBSD supports it and in fact uses it in e.g. the pidfile() code
used by at least one daemon (I forget which). pidfile locks the file,
the process forks the daemon, then later it is unlocked in the child. I
am not sure if you can also do the same thing by passing a file
descriptor with sendmsg() and then unlocking it.
You do make a case that this behaviour should not be allowed though.
Kris
Sorry, this is a key difference in flock and fcntl locks, as described here: http://lists.freebsd.org/pipermail/freebsd-hackers/2004-May/006869.html The opengroup standard is referring to fcntl/lockf (POSIX) locks, not flock (BSD) locks. Responsible Changed From-To: freebsd-bugs->dfr Assign to Doug, who is now working with the NFS file locking code. dfr 2008-06-26 10:21:54 UTC FreeBSD src repository Modified files: sys/conf files sys/kern kern_lockf.c sys/modules/nfslockd Makefile sys/nfsclient nfs.h nfs_node.c nfs_vfsops.c nfs_vnops.c nfsmount.h nfsnode.h sys/nlm nlm.h nlm_prot.h nlm_prot_clnt.c nlm_prot_impl.c nlm_prot_server.c sys/rpc auth_unix.c authunix_prot.c clnt.h clnt_dg.c clnt_rc.c clnt_vc.c svc_vc.c sys/sys fcntl.h lockf.h param.h tools/regression/file/flock flock.c usr.sbin/rpc.lockd lockd.c usr.sbin/rpc.statd file.c Added files: sys/nlm nlm_advlock.c Log: SVN rev 180025 on 2008-06-26 10:21:54Z by dfr Re-implement the client side of rpc.lockd in the kernel. This implementation provides the correct semantics for flock(2) style locks which are used by the lockf(1) command line tool and the pidfile(3) library. It also implements recovery from server restarts and ensures that dirty cache blocks are written to the server before obtaining locks (allowing multiple clients to use file locking to safely share data). Sponsored by: Isilon Systems PR: 94256 MFC after: 2 weeks Revision Changes Path 1.1312 +1 -0 src/sys/conf/files 1.65 +110 -26 src/sys/kern/kern_lockf.c 1.2 +1 -0 src/sys/modules/nfslockd/Makefile 1.100 +1 -0 src/sys/nfsclient/nfs.h 1.89 +7 -0 src/sys/nfsclient/nfs_node.c 1.206 +7 -0 src/sys/nfsclient/nfs_vfsops.c 1.286 +9 -2 src/sys/nfsclient/nfs_vnops.c 1.34 +1 -0 src/sys/nfsclient/nfsmount.h 1.63 +3 -0 src/sys/nfsclient/nfsnode.h 1.2 +120 -24 src/sys/nlm/nlm.h 1.1 +1235 -0 src/sys/nlm/nlm_advlock.c (new) 1.2 +39 -39 src/sys/nlm/nlm_prot.h 1.3 +117 -120 src/sys/nlm/nlm_prot_clnt.c 1.10 +549 -176 src/sys/nlm/nlm_prot_impl.c 1.3 +66 -112 src/sys/nlm/nlm_prot_server.c 1.3 +95 -32 src/sys/rpc/auth_unix.c 1.3 +5 -0 src/sys/rpc/authunix_prot.c 1.2 +88 -10 src/sys/rpc/clnt.h 1.3 +146 -72 src/sys/rpc/clnt_dg.c 1.4 +90 -13 src/sys/rpc/clnt_rc.c 1.3 +96 -42 src/sys/rpc/clnt_vc.c 1.3 +36 -13 src/sys/rpc/svc_vc.c 1.22 +1 -0 src/sys/sys/fcntl.h 1.23 +5 -0 src/sys/sys/lockf.h 1.358 +1 -1 src/sys/sys/param.h 1.3 +182 -50 src/tools/regression/file/flock/flock.c 1.29 +62 -45 src/usr.sbin/rpc.lockd/lockd.c 1.9 +30 -0 src/usr.sbin/rpc.statd/file.c _______________________________________________ cvs-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/cvs-all To unsubscribe, send any mail to "cvs-all-unsubscribe@freebsd.org" dfr 2008-08-05 10:35:51 UTC FreeBSD src repository Modified files: (Branch: RELENG_7) sys/conf files sys/kern kern_lockf.c sys/modules/nfslockd Makefile sys/nfsclient nfs.h nfs_node.c nfs_vfsops.c nfs_vnops.c nfsmount.h nfsnode.h sys/nlm nlm.h nlm_prot.h nlm_prot_clnt.c nlm_prot_impl.c nlm_prot_server.c sys/rpc auth_unix.c authunix_prot.c clnt.h clnt_dg.c clnt_rc.c clnt_vc.c svc_vc.c sys/sys fcntl.h lockf.h param.h tools/regression/file/flock flock.c usr.sbin/rpc.lockd lockd.c usr.sbin/rpc.statd file.c Added files: (Branch: RELENG_7) sys/nlm nlm_advlock.c Log: SVN rev 181328 on 2008-08-05 10:35:51Z by dfr MFC: r180025,180064,180069,180217,180743,180779-180780 Implement support for NFS advisory locking in the kernel including correct semantics for flock(2) style locks. Sponsored by: Isilon Systems PR: 94256 Revision Changes Path 1.1243.2.33 +1 -0 src/sys/conf/files 1.57.2.4 +110 -26 src/sys/kern/kern_lockf.c 1.1.2.2 +1 -0 src/sys/modules/nfslockd/Makefile 1.98.2.2 +1 -0 src/sys/nfsclient/nfs.h 1.86.2.1 +7 -0 src/sys/nfsclient/nfs_node.c 1.193.2.3 +15 -4 src/sys/nfsclient/nfs_vfsops.c 1.276.2.4 +9 -2 src/sys/nfsclient/nfs_vnops.c 1.32.2.2 +1 -0 src/sys/nfsclient/nfsmount.h 1.60.2.2 +3 -0 src/sys/nfsclient/nfsnode.h 1.1.2.2 +120 -24 src/sys/nlm/nlm.h 1.2.2.1 +1235 -0 src/sys/nlm/nlm_advlock.c (new) 1.1.2.2 +39 -39 src/sys/nlm/nlm_prot.h 1.2.2.2 +117 -120 src/sys/nlm/nlm_prot_clnt.c 1.4.2.7 +552 -176 src/sys/nlm/nlm_prot_impl.c 1.2.2.2 +66 -112 src/sys/nlm/nlm_prot_server.c 1.2.2.2 +100 -32 src/sys/rpc/auth_unix.c 1.2.2.2 +5 -0 src/sys/rpc/authunix_prot.c 1.1.2.2 +88 -10 src/sys/rpc/clnt.h 1.2.2.2 +146 -72 src/sys/rpc/clnt_dg.c 1.2.2.3 +90 -13 src/sys/rpc/clnt_rc.c 1.2.2.2 +96 -42 src/sys/rpc/clnt_vc.c 1.2.2.2 +36 -13 src/sys/rpc/svc_vc.c 1.16.18.3 +1 -0 src/sys/sys/fcntl.h 1.20.2.3 +5 -0 src/sys/sys/lockf.h 1.308.2.14 +1 -1 src/sys/sys/param.h 1.2.2.2 +182 -50 src/tools/regression/file/flock/flock.c 1.20.2.5 +63 -45 src/usr.sbin/rpc.lockd/lockd.c 1.8.2.1 +30 -0 src/usr.sbin/rpc.statd/file.c _______________________________________________ cvs-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/cvs-all To unsubscribe, send any mail to "cvs-all-unsubscribe@freebsd.org" State Changed From-To: open->closed NFS file locking has been re-implemented in head, stable/8 and stable/7. |