[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Thu Jun 21 13:54:02 MDT 2012


The branch, master has been updated
       via  dd763d6 Fix bug #8974 - Kernel oplocks are broken when uid(file) != uid(process).
      from  7b43053 Add --disable-ntdb option for building.

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit dd763d6d8e999b03164cef79a97c1350a556fef7
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Jun 20 15:50:00 2012 -0700

    Fix bug #8974 - Kernel oplocks are broken when uid(file) != uid(process).
    
    Based on a fix from "Etienne Dechamps " <e-t172 at akegroup.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Thu Jun 21 21:53:58 CEST 2012 on sn-devel-104

-----------------------------------------------------------------------

Summary of changes:
 source3/modules/vfs_default.c |    5 -----
 source3/smbd/oplock_linux.c   |   13 +++++++++++++
 2 files changed, 13 insertions(+), 5 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/modules/vfs_default.c b/source3/modules/vfs_default.c
index b387cce..eb3e343 100644
--- a/source3/modules/vfs_default.c
+++ b/source3/modules/vfs_default.c
@@ -1573,11 +1573,6 @@ static int vfswrap_linux_setlease(vfs_handle_struct *handle, files_struct *fsp,
 	START_PROFILE(syscall_linux_setlease);
 
 #ifdef HAVE_KERNEL_OPLOCKS_LINUX
-	/* first set the signal handler */
-	if(linux_set_lease_sighandler(fsp->fh->fd) == -1) {
-		return -1;
-	}
-
 	result = linux_setlease(fsp->fh->fd, leasetype);
 #else
 	errno = ENOSYS;
diff --git a/source3/smbd/oplock_linux.c b/source3/smbd/oplock_linux.c
index 190578e..7fa9b7c 100644
--- a/source3/smbd/oplock_linux.c
+++ b/source3/smbd/oplock_linux.c
@@ -76,9 +76,22 @@ int linux_setlease(int fd, int leasetype)
 {
 	int ret;
 
+	/* First set the signal handler. */
+	if (linux_set_lease_sighandler(fd) == -1) {
+		return -1;
+	}
 	ret = fcntl(fd, F_SETLEASE, leasetype);
 	if (ret == -1 && errno == EACCES) {
 		set_effective_capability(LEASE_CAPABILITY);
+		/*
+		 * Bug 8974 - work around Linux kernel bug
+		 * https://bugzilla.kernel.org/show_bug.cgi?id=43336.
+		 * "fcntl(F_SETLEASE) resets signal number when
+		 *  called multiple times"
+		 */
+		if (linux_set_lease_sighandler(fd) == -1) {
+			return -1;
+		}
 		ret = fcntl(fd, F_SETLEASE, leasetype);
 	}
 


-- 
Samba Shared Repository


More information about the samba-cvs mailing list