diff options
author | Andrew Tridgell <tridge@samba.org> | 2000-06-11 06:46:05 +0000 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 2000-06-11 06:46:05 +0000 |
commit | cc0e919fdcb116c8f9688a4f5d7803fc8d7f9588 (patch) | |
tree | b3d11fb63a02d28448daf4b1a67cf999c2c20a92 /source/smbd/oplock_linux.c | |
parent | afa98d511f70f455d599c3a36dd25e49fe74ac09 (diff) | |
download | samba-cc0e919fdcb116c8f9688a4f5d7803fc8d7f9588.tar.gz samba-cc0e919fdcb116c8f9688a4f5d7803fc8d7f9588.tar.xz samba-cc0e919fdcb116c8f9688a4f5d7803fc8d7f9588.zip |
a better test for oplocks being enabled in this kernel
Diffstat (limited to 'source/smbd/oplock_linux.c')
-rw-r--r-- | source/smbd/oplock_linux.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/source/smbd/oplock_linux.c b/source/smbd/oplock_linux.c index ae0a72d0f67..46290683d25 100644 --- a/source/smbd/oplock_linux.c +++ b/source/smbd/oplock_linux.c @@ -31,7 +31,6 @@ static unsigned signals_received; static unsigned signals_processed; static int fd_pending; /* the fd of the current pending SIGIO */ - #ifndef F_SETLEASE #define F_SETLEASE 1024 #endif @@ -237,6 +236,19 @@ static BOOL linux_oplock_msg_waiting(fd_set *fds) return signals_processed != signals_received; } +/**************************************************************************** +see if the kernel supports oplocks +****************************************************************************/ +static BOOL linux_oplocks_available(void) +{ + int fd, ret; + fd = open("/dev/null", O_RDONLY); + if (fd == -1) return False; /* uggh! */ + ret = fcntl(fd, F_GETLEASE, 0); + close(fd); + return ret == F_UNLCK; +} + /**************************************************************************** setup kernel oplocks @@ -246,6 +258,11 @@ struct kernel_oplocks *linux_init_kernel_oplocks(void) static struct kernel_oplocks koplocks; struct sigaction act; + if (!linux_oplocks_available()) { + DEBUG(3,("Linux kernel oplocks not available\n")); + return NULL; + } + act.sa_handler = NULL; act.sa_sigaction = sigio_handler; act.sa_flags = SA_SIGINFO; |