From a4ba9bb939ff066c8844273da312209a1d1100d2 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sun, 11 Jun 2000 06:46:05 +0000 Subject: a better test for oplocks being enabled in this kernel (This used to be commit cc0e919fdcb116c8f9688a4f5d7803fc8d7f9588) --- source3/smbd/oplock_linux.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'source3') diff --git a/source3/smbd/oplock_linux.c b/source3/smbd/oplock_linux.c index ae0a72d0f6..46290683d2 100644 --- a/source3/smbd/oplock_linux.c +++ b/source3/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; -- cgit