mirror of
https://github.com/samba-team/samba.git
synced 2024-12-22 13:34:15 +03:00
6d4ce53ecd
F_GETLEASE/F_SETLEASE are available (at least) since Linux 2.4.0 from 2002. We also should not have the configure check depend on the filesystem we find at build time. It's very common that the build-environment is much more restricted than the runtime-environment will be. As a history we had this check on Samba 3.6: AC_CACHE_CHECK([for Linux kernel oplocks],samba_cv_HAVE_KERNEL_OPLOCKS_LINUX,[ AC_TRY_RUN([ #include <sys/types.h> #include <fcntl.h> #ifndef F_GETLEASE #define F_GETLEASE 1025 #endif main() { int fd = open("/dev/null", O_RDONLY); return fcntl(fd, F_GETLEASE, 0) == -1; } ], samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=no,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross)]) if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then AC_DEFINE(HAVE_KERNEL_OPLOCKS_LINUX,1,[Whether to use linux kernel oplocks]) fi which didn't depend on the filesystem. Then we got a broken check introduced in Samba 4.0 (a copy of the F_NOTIFY check): # Check for Linux kernel oplocks conf.CHECK_CODE(''' #include <sys/types.h> #include <fcntl.h> #include <signal.h> #ifndef F_NOTIFY #define F_NOTIFY 1026 #endif main() { exit(fcntl(open("/tmp", O_RDONLY), F_NOTIFY, 0) == -1 ? 1 : 0); }''', 'HAVE_KERNEL_OPLOCKS_LINUX', addmain=False, execute=True, msg="Checking for Linux kernel oplocks") this got "fixed" in Samba 4.7 (and backports to 4.6, 4.5 and 4.4) into # Check for Linux kernel oplocks conf.CHECK_CODE(''' #include <sys/types.h> #include <fcntl.h> #include <signal.h> #ifndef F_GETLEASE #define F_GETLEASE 1025 #endif main() { exit(fcntl(open("/tmp", O_RDONLY), F_GETLEASE, 0) == -1 ? 1 : 0); }''', 'HAVE_KERNEL_OPLOCKS_LINUX', addmain=False, execute=True, msg="Checking for Linux kernel oplocks") Lately it became dependend on the filesystem in the build-environment: # Check for Linux kernel oplocks conf.CHECK_CODE(''' #include <sys/types.h> #include <fcntl.h> #include <signal.h> #ifndef F_GETLEASE #define F_GETLEASE 1025 #endif main() { const char *fname="/tmp/oplock-test.txt"; int fd = open(fname, O_RDWR|O_CREAT, 0644); int ret = fcntl(fd, F_SETLEASE, F_WRLCK); unlink(fname); return (ret == -1) ? 1 : 0; }''', 'HAVE_KERNEL_OPLOCKS_LINUX', addmain=False, execute=True, msg="Checking for Linux kernel oplocks") Now we just check for F_SETLEASE being available in linux/fcntl.h. Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org> |
||
---|---|---|
.. | ||
inotify.c | ||
README | ||
sys_lease_linux.c | ||
sys_lease.c | ||
sys_lease.h | ||
sys_notify.c | ||
sys_notify.h | ||
wscript_build | ||
wscript_configure |
This directory contains OS depdendent interfaces to facilities that are only available on a few of our target systems, and require substantial code to abstract.