summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2019-08-13 18:34:36 +0200
committerStefan Metzmacher <metze@samba.org>2019-09-09 16:04:28 +0000
commit6b23f24ee383763c45af8c627df09060d76d9dd8 (patch)
tree563e2916365fd95f13b135094ba4b3887c712c00
parentb381f4b314c71c446a847de7cdb5baa658455c90 (diff)
downloadsamba-6b23f24ee383763c45af8c627df09060d76d9dd8.tar.gz
s3:blocking: move from 'timeout' to 'smbd_smb1_do_locks_state->timeout'
This will make it possible to just use smbd_smb1_do_locks_try() in a later commit. BUG: https://bugzilla.samba.org/show_bug.cgi?id=14113 Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Volker Lendecke <vl@samba.org> (cherry picked from commit 8fe708acb43ea36d0cbf398713b125daba180a2d)
-rw-r--r--source3/smbd/blocking.c20
-rw-r--r--source3/smbd/proto.h2
2 files changed, 12 insertions, 10 deletions
diff --git a/source3/smbd/blocking.c b/source3/smbd/blocking.c
index 0fa39ae58ab..81facc43154 100644
--- a/source3/smbd/blocking.c
+++ b/source3/smbd/blocking.c
@@ -101,6 +101,7 @@ struct smbd_smb1_do_locks_state {
struct tevent_context *ev;
struct smb_request *smbreq;
struct files_struct *fsp;
+ uint32_t timeout;
struct timeval endtime;
bool large_offset; /* required for correct cancel */
enum brl_flavour lock_flav;
@@ -119,7 +120,7 @@ struct tevent_req *smbd_smb1_do_locks_send(
struct tevent_context *ev,
struct smb_request **smbreq, /* talloc_move()d into our state */
struct files_struct *fsp,
- uint32_t timeout,
+ uint32_t lock_timeout,
bool large_offset,
enum brl_flavour lock_flav,
uint16_t num_locks,
@@ -142,6 +143,7 @@ struct tevent_req *smbd_smb1_do_locks_send(
state->ev = ev;
state->smbreq = talloc_move(state, smbreq);
state->fsp = fsp;
+ state->timeout = lock_timeout;
state->large_offset = large_offset;
state->lock_flav = lock_flav;
state->num_locks = num_locks;
@@ -155,13 +157,13 @@ struct tevent_req *smbd_smb1_do_locks_send(
return tevent_req_post(req, ev);
}
- if ((timeout != 0) && (timeout != UINT32_MAX)) {
+ if ((state->timeout != 0) && (state->timeout != UINT32_MAX)) {
/*
* Windows internal resolution for blocking locks
* seems to be about 200ms... Don't wait for less than
* that. JRA.
*/
- timeout = MAX(timeout, lp_lock_spin_time());
+ state->timeout = MAX(state->timeout, lp_lock_spin_time());
}
lck = get_existing_share_mode_lock(state, state->fsp->file_id);
@@ -187,7 +189,7 @@ struct tevent_req *smbd_smb1_do_locks_send(
goto done;
}
- if (timeout == 0) {
+ if (state->timeout == 0) {
struct smbd_lock_element *blocker = &locks[state->blocker];
if ((blocker->offset >= 0xEF000000) &&
@@ -196,7 +198,7 @@ struct tevent_req *smbd_smb1_do_locks_send(
* This must be an optimization of an ancient
* application bug...
*/
- timeout = lp_lock_spin_time();
+ state->timeout = lp_lock_spin_time();
}
if ((fsp->lock_failure_seen) &&
@@ -208,15 +210,15 @@ struct tevent_req *smbd_smb1_do_locks_send(
*/
DBG_DEBUG("Delaying lock request due to previous "
"failure\n");
- timeout = lp_lock_spin_time();
+ state->timeout = lp_lock_spin_time();
}
}
DBG_DEBUG("timeout=%"PRIu32", blocking_smblctx=%"PRIu64"\n",
- timeout,
+ state->timeout,
blocking_smblctx);
- if (timeout == 0) {
+ if (state->timeout == 0) {
tevent_req_nterror(req, status);
goto done;
}
@@ -229,7 +231,7 @@ struct tevent_req *smbd_smb1_do_locks_send(
TALLOC_FREE(lck);
tevent_req_set_callback(subreq, smbd_smb1_do_locks_retry, req);
- state->endtime = timeval_current_ofs_msec(timeout);
+ state->endtime = timeval_current_ofs_msec(state->timeout);
endtime = state->endtime;
if (blocking_smblctx == UINT64_MAX) {
diff --git a/source3/smbd/proto.h b/source3/smbd/proto.h
index b59f1f4123d..cd1ec9a1f9e 100644
--- a/source3/smbd/proto.h
+++ b/source3/smbd/proto.h
@@ -108,7 +108,7 @@ struct tevent_req *smbd_smb1_do_locks_send(
struct tevent_context *ev,
struct smb_request **smbreq, /* talloc_move()d into our state */
struct files_struct *fsp,
- uint32_t timeout,
+ uint32_t lock_timeout,
bool large_offset,
enum brl_flavour lock_flav,
uint16_t num_locks,