mirror of
https://github.com/samba-team/samba.git
synced 2025-01-22 22:04:08 +03:00
s3:vfs: Correctly check if OFD locks should be enabled or not
Also the smb.conf options should only be checked once and a reload of the config should not switch to a different locking mode. Signed-off-by: Andreas Schneider <asn@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org> Autobuild-User(master): Jeremy Allison <jra@samba.org> Autobuild-Date(master): Sat Feb 9 03:43:50 CET 2019 on sn-devel-144
This commit is contained in:
parent
2ff2594b2b
commit
7ff94b18e2
@ -360,7 +360,7 @@ void set_namearray(name_compare_entry **ppname_array, const char *namelist);
|
||||
void free_namearray(name_compare_entry *name_array);
|
||||
bool fcntl_lock(int fd, int op, off_t offset, off_t count, int type);
|
||||
bool fcntl_getlock(int fd, int op, off_t *poffset, off_t *pcount, int *ptype, pid_t *ppid);
|
||||
int map_process_lock_to_ofd_lock(int op, bool *use_ofd_locks);
|
||||
int map_process_lock_to_ofd_lock(int op);
|
||||
bool is_myname(const char *s);
|
||||
void ra_lanman_string( const char *native_lanman );
|
||||
const char *get_remote_arch_str(void);
|
||||
|
@ -1079,7 +1079,7 @@ bool fcntl_getlock(int fd, int op, off_t *poffset, off_t *pcount, int *ptype, pi
|
||||
}
|
||||
|
||||
#if defined(HAVE_OFD_LOCKS)
|
||||
int map_process_lock_to_ofd_lock(int op, bool *use_ofd_locks)
|
||||
int map_process_lock_to_ofd_lock(int op)
|
||||
{
|
||||
switch (op) {
|
||||
case F_GETLK:
|
||||
@ -1095,16 +1095,13 @@ int map_process_lock_to_ofd_lock(int op, bool *use_ofd_locks)
|
||||
op = F_OFD_SETLKW;
|
||||
break;
|
||||
default:
|
||||
*use_ofd_locks = false;
|
||||
return -1;
|
||||
}
|
||||
*use_ofd_locks = true;
|
||||
return op;
|
||||
}
|
||||
#else /* HAVE_OFD_LOCKS */
|
||||
int map_process_lock_to_ofd_lock(int op, bool *use_ofd_locks)
|
||||
int map_process_lock_to_ofd_lock(int op)
|
||||
{
|
||||
*use_ofd_locks = false;
|
||||
return op;
|
||||
}
|
||||
#endif /* HAVE_OFD_LOCKS */
|
||||
|
@ -2553,11 +2553,8 @@ static bool vfswrap_lock(vfs_handle_struct *handle, files_struct *fsp, int op, o
|
||||
|
||||
START_PROFILE(syscall_fcntl_lock);
|
||||
|
||||
if (fsp->use_ofd_locks || !lp_parm_bool(SNUM(fsp->conn),
|
||||
"smbd",
|
||||
"force process locks",
|
||||
false)) {
|
||||
op = map_process_lock_to_ofd_lock(op, &fsp->use_ofd_locks);
|
||||
if (fsp->use_ofd_locks) {
|
||||
op = map_process_lock_to_ofd_lock(op);
|
||||
}
|
||||
|
||||
result = fcntl_lock(fsp->fh->fd, op, offset, count, type);
|
||||
@ -2581,11 +2578,8 @@ static bool vfswrap_getlock(vfs_handle_struct *handle, files_struct *fsp, off_t
|
||||
|
||||
START_PROFILE(syscall_fcntl_getlock);
|
||||
|
||||
if (fsp->use_ofd_locks || !lp_parm_bool(SNUM(fsp->conn),
|
||||
"smbd",
|
||||
"force process locks",
|
||||
false)) {
|
||||
op = map_process_lock_to_ofd_lock(op, &fsp->use_ofd_locks);
|
||||
if (fsp->use_ofd_locks) {
|
||||
op = map_process_lock_to_ofd_lock(op);
|
||||
}
|
||||
|
||||
result = fcntl_getlock(fsp->fh->fd, op, poffset, pcount, ptype, ppid);
|
||||
|
@ -51,6 +51,15 @@ NTSTATUS fsp_new(struct connection_struct *conn, TALLOC_CTX *mem_ctx,
|
||||
goto fail;
|
||||
}
|
||||
|
||||
#if defined(HAVE_OFD_LOCKS)
|
||||
fsp->use_ofd_locks = true;
|
||||
if (lp_parm_bool(SNUM(conn),
|
||||
"smbd",
|
||||
"force process locks",
|
||||
false)) {
|
||||
fsp->use_ofd_locks = false;
|
||||
}
|
||||
#endif
|
||||
fsp->fh->ref_count = 1;
|
||||
fsp->fh->fd = -1;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user