mirror of
https://github.com/samba-team/samba.git
synced 2025-01-29 21:47:30 +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>
This is the base of the new NTVFS subsystem for Samba. The model for NTVFS backends is quite different than for the older style VFS backends, in particular: - the NTVFS backends receive windows style file names, although they are in the unix charset (usually UTF8). This means the backend is responsible for mapping windows filename conventions to unix filename conventions if necessary - the NTVFS backends are responsible for changing effective UID before calling any OS local filesystem operations (if needed). The become_*() functions are provided to make this easier. - the NTVFS backends are responsible for resolving DFS paths - each NTVFS backend handles either disk, printer or IPC$ shares, rather than one backend handling all types - the entry points of the NTVFS backends correspond closely with basic SMB operations, wheres the old VFS was modelled directly on the POSIX filesystem interface. - the NTVFS backends are responsible for all semantic mappings, such as mapping dos file attributes, ACLs, file ownership and file times