The branch, v3-6-test has been updated via 9ef80fc Ensure gpfs kernel leases are wrapped in a become_root()/unbecome_root() pair. via 3630254 Wrap setting leases in become_root()/unbecome_root() to ensure correct delivery of signals. from b085c39 Fix bug 9678 - Windows 8 Roaming profiles fail
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-6-test - Log ----------------------------------------------------------------- commit 9ef80fcff6e0d03e30bd675cd7ebfc88608e81d6 Author: Ralph Wuerthner <ral...@de.ibm.com> Date: Wed Jul 31 16:33:48 2013 -0700 Ensure gpfs kernel leases are wrapped in a become_root()/unbecome_root() pair. Ensures correct lease owner for signal delivery. Signed-off-by: Ralph Wuerthner <ral...@de.ibm.com> Reviewed-by: Jeremy Allison <j...@samba.org> Reviewed-by: Simo Sorce <i...@samba.org> Autobuild-User(master): Jeremy Allison <j...@samba.org> Autobuild-Date(master): Thu Aug 1 03:57:11 CEST 2013 on sn-devel-104 The last 2 patches address bug #10064 - Linux kernel oplock breaks can miss signals. commit 363025491d97171e130a7b8dd03296b9559799a0 Author: Jeremy Allison <j...@samba.org> Date: Wed Jul 31 16:32:20 2013 -0700 Wrap setting leases in become_root()/unbecome_root() to ensure correct delivery of signals. Remove workaround for Linux kernel bug https://bugzilla.kernel.org/show_bug.cgi?id=43336 as we don't need to set capabilities when we're already root. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Simo Sorce <i...@samba.org> ----------------------------------------------------------------------- Summary of changes: source3/modules/vfs_gpfs.c | 6 ++++++ source3/smbd/oplock_linux.c | 33 ++++++++++++++++++++------------- 2 files changed, 26 insertions(+), 13 deletions(-) Changeset truncated at 500 lines: diff --git a/source3/modules/vfs_gpfs.c b/source3/modules/vfs_gpfs.c index 7bc2832..4aad679 100644 --- a/source3/modules/vfs_gpfs.c +++ b/source3/modules/vfs_gpfs.c @@ -97,7 +97,13 @@ static int vfs_gpfs_setlease(vfs_handle_struct *handle, files_struct *fsp, return -1; if (config->leases) { + /* + * Ensure the lease owner is root to allow + * correct delivery of lease-break signals. + */ + become_root(); ret = set_gpfs_lease(fsp->fh->fd,leasetype); + unbecome_root(); } if (ret < 0) { diff --git a/source3/smbd/oplock_linux.c b/source3/smbd/oplock_linux.c index 02bd32a..82523f2 100644 --- a/source3/smbd/oplock_linux.c +++ b/source3/smbd/oplock_linux.c @@ -75,26 +75,33 @@ int linux_set_lease_sighandler(int fd) int linux_setlease(int fd, int leasetype) { int ret; + int saved_errno; + + /* + * Ensure the lease owner is root to allow + * correct delivery of lease-break signals. + */ + + become_root(); /* First set the signal handler. */ if (linux_set_lease_sighandler(fd) == -1) { - return -1; + saved_errno = errno; + ret = -1; + goto out; } 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); + if (ret == -1) { + saved_errno = errno; } + out: + + unbecome_root(); + + if (ret == -1) { + errno = saved_errno; + } return ret; } -- Samba Shared Repository