summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
authorAndreas Schneider <asn@samba.org>2019-01-30 18:45:34 +0100
committerKarolin Seeger <kseeger@samba.org>2019-02-21 12:31:46 +0100
commit2f8bd74b67cda93a4bc8918cd6b1f950aa109b00 (patch)
tree610a5b3b5e7b01b2166a066dae0535f1a6ee4dde /source3
parentb9120174c6699696ffe08ec1b969544d9f340f8d (diff)
downloadsamba-2f8bd74b67cda93a4bc8918cd6b1f950aa109b00.tar.gz
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. BUG: https://bugzilla.samba.org/show_bug.cgi?id=13770 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 (cherry picked from commit 7ff94b18e2e39567ef7a208084cc5c914c39d3bd)
Diffstat (limited to 'source3')
-rw-r--r--source3/include/proto.h2
-rw-r--r--source3/lib/util.c7
-rw-r--r--source3/modules/vfs_default.c14
-rw-r--r--source3/smbd/files.c9
4 files changed, 16 insertions, 16 deletions
diff --git a/source3/include/proto.h b/source3/include/proto.h
index 2bc5ab2f532..54c1b08a61b 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -362,7 +362,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);
diff --git a/source3/lib/util.c b/source3/lib/util.c
index 5f786f95d3e..cd9df464cca 100644
--- a/source3/lib/util.c
+++ b/source3/lib/util.c
@@ -1070,7 +1070,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:
@@ -1086,16 +1086,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 */
diff --git a/source3/modules/vfs_default.c b/source3/modules/vfs_default.c
index a9c87e444fe..586d8b1fb2d 100644
--- a/source3/modules/vfs_default.c
+++ b/source3/modules/vfs_default.c
@@ -2500,11 +2500,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);
@@ -2528,11 +2525,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);
diff --git a/source3/smbd/files.c b/source3/smbd/files.c
index 303ab7bb926..e15dafe5abc 100644
--- a/source3/smbd/files.c
+++ b/source3/smbd/files.c
@@ -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;