From: Ralph Boehme Date: Wed, 1 Apr 2020 09:59:10 +0000 (+0200) Subject: smbd: move files_struct.kernel_share_modes_taken to a bitfield X-Git-Tag: ldb-2.2.0~998 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=7c386c08dcc9e52b40f64034b6f726e477e04722;p=thirdparty%2Fsamba.git smbd: move files_struct.kernel_share_modes_taken to a bitfield Signed-off-by: Ralph Boehme Reviewed-by: Jeremy Allison --- diff --git a/source3/include/vfs.h b/source3/include/vfs.h index fe315673823..b05ff13504b 100644 --- a/source3/include/vfs.h +++ b/source3/include/vfs.h @@ -357,7 +357,9 @@ typedef struct files_struct { uint64_t vuid; /* SMB2 compat */ struct timeval open_time; uint32_t access_mask; /* NTCreateX access bits (FILE_READ_DATA etc.) */ - bool kernel_share_modes_taken; + struct { + bool kernel_share_modes_taken : 1; + } fsp_flags; bool update_write_time_triggered; struct tevent_timer *update_write_time_event; diff --git a/source3/modules/vfs_gpfs.c b/source3/modules/vfs_gpfs.c index 115459bd15d..ea88db868fc 100644 --- a/source3/modules/vfs_gpfs.c +++ b/source3/modules/vfs_gpfs.c @@ -200,7 +200,9 @@ static int vfs_gpfs_close(vfs_handle_struct *handle, files_struct *fsp) struct gpfs_config_data, return -1); - if (config->sharemodes && fsp->kernel_share_modes_taken) { + if (config->sharemodes && + (fsp->fsp_flags.kernel_share_modes_taken)) + { /* * Always clear GPFS sharemode in case the actual * close gets deferred due to outstanding POSIX locks diff --git a/source3/smbd/close.c b/source3/smbd/close.c index d5af62a277c..86412dc2bca 100644 --- a/source3/smbd/close.c +++ b/source3/smbd/close.c @@ -455,7 +455,7 @@ static NTSTATUS close_remove_share_mode(files_struct *fsp, } } - if (fsp->kernel_share_modes_taken) { + if (fsp->fsp_flags.kernel_share_modes_taken) { int ret_flock; /* @@ -468,7 +468,7 @@ static NTSTATUS close_remove_share_mode(files_struct *fsp, fsp_str_dbg(fsp), strerror(errno)); } - fsp->kernel_share_modes_taken = false; + fsp->fsp_flags.kernel_share_modes_taken = false; } @@ -509,7 +509,7 @@ static NTSTATUS close_remove_share_mode(files_struct *fsp, pop_sec_ctx(); } - if (fsp->kernel_share_modes_taken) { + if (fsp->fsp_flags.kernel_share_modes_taken) { int ret_flock; /* remove filesystem sharemodes */ diff --git a/source3/smbd/open.c b/source3/smbd/open.c index 378c43272ab..41f253c77e4 100644 --- a/source3/smbd/open.c +++ b/source3/smbd/open.c @@ -3898,7 +3898,7 @@ static NTSTATUS open_file_ntcreate(connection_struct *conn, return NT_STATUS_SHARING_VIOLATION; } - fsp->kernel_share_modes_taken = true; + fsp->fsp_flags.kernel_share_modes_taken = true; } /*