Date: Tue, 10 Mar 2009 09:18:35 +0000 From: Doug Rabson <dfr@rabson.org> To: Daniel Eischen <deischen@freebsd.org> Cc: cvs-src@freebsd.org, Doug Rabson <dfr@freebsd.org>, src-committers@freebsd.org, cvs-all@freebsd.org Subject: Re: cvs commit: src/lib/libc/gen lockf.c src/lib/libc/sys Symbol.map fcntl.2 src/sys/compat/freebsd32 syscalls.master src/sys/compat/linux linux_file.c src/sys/compat/svr4 svr4_fcntl.c src/sys/conf NOTES files options ... Message-ID: <2E168868-9711-4BF7-A398-FF4195390B7C@rabson.org> In-Reply-To: <Pine.GSO.4.64.0903092311160.13711@sea.ntplx.net> References: <200803261523.m2QFND30047541@repoman.freebsd.org> <Pine.GSO.4.64.0903092311160.13711@sea.ntplx.net>
next in thread | previous in thread | raw e-mail | index | archive | help
On 10 Mar 2009, at 03:21, Daniel Eischen wrote: > On Wed, 26 Mar 2008, Doug Rabson wrote: > >> dfr 2008-03-26 15:23:13 UTC >> >> FreeBSD src repository >> >> Modified files: >> lib/libc/sys Symbol.map fcntl.2 > [ ... ] >> sys/sys fcntl.h lockf.h > [ ... ] >> Log: >> Add the new kernel-mode NFS Lock Manager. To use it instead of the >> user-mode lock manager, build a kernel with the NFSLOCKD option and >> add '-k' to 'rpc_lockd_flags' in rc.conf. > > Sorry to notice this 1 year too late, but doesn't this > break ABI? You have changed the size (increased) of > struct flock and haven't really provided a compat version > of fcntl() that will work with binaries built before > the change. I added new fcntl commands for the new structures. The old commands were renamed to F_OGETLK, F_OSETLK and F_OSETLKW and continue to use the old structures. A new kernel translates old fcntl commands to the equivalent new commands. A new libc will detect when its running on an old kernel and will translate the new fcntl commands to the equivalent old ones. > > Is there any way that the new field can be accidentally > used by the kernel from a binary built against the older > struct flock? No. > > Now that we have symbol versioning, the way this normally > should be handled is by adding a compat fcntl() for > FBSD_1.0 in libc, and placing the new fcntl() in FBSD_1.1. > And since libthr wraps fcntl() for cancellation points, > I believe it would also need the same compat functions. I thought about this but in the end it was simpler to add new fcntl commands. The libthr compat issue is dealt with by calling __fcntl_compat() for commands other than F_DUPFD, F_SETFD, F_SETFL, F_GETFD or F_GETFL.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?2E168868-9711-4BF7-A398-FF4195390B7C>