The branch, master has been updated via 6b232b2 smbd:close: only remove kernel share modes if they had been taken at open via 3564873 s3:vfs: add 'kernel_share_modes_taken' to files_struct from 1171fe6 s3-net: Cleanup the code of printing migration
https://git.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 6b232b2720a3d71bc0b4b5603215b3f9d3de5ca6 Author: Michael Adam <ob...@samba.org> Date: Sun May 15 23:24:08 2016 +0200 smbd:close: only remove kernel share modes if they had been taken at open This avoids errors due to 'not implemented' for SMB_VFS_KERNEL_FLOCK on some file systems like glusterfs (with the vfs module). The only other code path where SMB_VFS_KERNEL_FLOCK is called, is already protected. BUG: https://bugzilla.samba.org/show_bug.cgi?id=11919 Signed-off-by: Michael Adam <ob...@samba.org> Reviewed-by: Christian Ambach <a...@samba.org> Autobuild-User(master): Christian Ambach <a...@samba.org> Autobuild-Date(master): Thu May 19 02:34:36 CEST 2016 on sn-devel-144 commit 356487345724ce5dffdddf9c60735b2c965f30bc Author: Michael Adam <ob...@samba.org> Date: Mon May 16 01:39:09 2016 +0200 s3:vfs: add 'kernel_share_modes_taken' to files_struct This will allow to track whether kernel share modes have been taken at open and correclty remove them again on close. BUG: https://bugzilla.samba.org/show_bug.cgi?id=11919 Signed-off-by: Michael Adam <ob...@samba.org> Reviewed-by: Christian Ambach <a...@samba.org> ----------------------------------------------------------------------- Summary of changes: source3/include/vfs.h | 2 ++ source3/smbd/close.c | 17 ++++++++++------- source3/smbd/open.c | 2 ++ 3 files changed, 14 insertions(+), 7 deletions(-) Changeset truncated at 500 lines: diff --git a/source3/include/vfs.h b/source3/include/vfs.h index 9360802..a849443 100644 --- a/source3/include/vfs.h +++ b/source3/include/vfs.h @@ -259,6 +259,8 @@ typedef struct files_struct { uint32_t access_mask; /* NTCreateX access bits (FILE_READ_DATA etc.) */ uint32_t share_access; /* NTCreateX share constants (FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE). */ + bool kernel_share_modes_taken; + bool update_write_time_triggered; struct tevent_timer *update_write_time_event; bool update_write_time_on_close; diff --git a/source3/smbd/close.c b/source3/smbd/close.c index 0302c67..9d1f1a9 100644 --- a/source3/smbd/close.c +++ b/source3/smbd/close.c @@ -250,7 +250,6 @@ static NTSTATUS close_remove_share_mode(files_struct *fsp, const struct security_token *del_nt_token = NULL; bool got_tokens = false; bool normal_close; - int ret_flock; /* Ensure any pending write time updates are done. */ if (fsp->update_write_time_event) { @@ -474,12 +473,16 @@ static NTSTATUS close_remove_share_mode(files_struct *fsp, pop_sec_ctx(); } - /* remove filesystem sharemodes */ - ret_flock = SMB_VFS_KERNEL_FLOCK(fsp, 0, 0); - if (ret_flock == -1) { - DEBUG(2, ("close_remove_share_mode: removing kernel flock for " - "%s failed: %s\n", fsp_str_dbg(fsp), - strerror(errno))); + if (fsp->kernel_share_modes_taken) { + int ret_flock; + + /* remove filesystem sharemodes */ + ret_flock = SMB_VFS_KERNEL_FLOCK(fsp, 0, 0); + if (ret_flock == -1) { + DEBUG(2, ("close_remove_share_mode: removing kernel " + "flock for %s failed: %s\n", + fsp_str_dbg(fsp), strerror(errno))); + } } if (!del_share_mode(lck, fsp)) { diff --git a/source3/smbd/open.c b/source3/smbd/open.c index d111254..af1c1de 100644 --- a/source3/smbd/open.c +++ b/source3/smbd/open.c @@ -3102,6 +3102,8 @@ static NTSTATUS open_file_ntcreate(connection_struct *conn, return NT_STATUS_SHARING_VIOLATION; } + + fsp->kernel_share_modes_taken = true; } /* -- Samba Shared Repository