mirror of
https://github.com/samba-team/samba.git
synced 2024-12-23 17:34:34 +03:00
s3: smb2: Simplify logic in reprocess_blocked_smb2_lock().
SMB2 blocking locks can only have one lock per request, so there can never be any other locks to wait for. Signed-off-by: Jeremy Allison <jra@samba.org> Reviewed-by: Ira Cooper <ira@samba.org> Reviewed-by: Volker Lendecke <vl@samba.org>
This commit is contained in:
parent
508c09c6a0
commit
1a02a1e6aa
@ -677,6 +677,8 @@ static void reprocess_blocked_smb2_lock(struct smbd_smb2_request *smb2req,
|
|||||||
NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
|
NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
|
||||||
struct blocking_lock_record *blr = NULL;
|
struct blocking_lock_record *blr = NULL;
|
||||||
struct smbd_smb2_lock_state *state = NULL;
|
struct smbd_smb2_lock_state *state = NULL;
|
||||||
|
struct byte_range_lock *br_lck = NULL;
|
||||||
|
struct smbd_lock_element *e = NULL;
|
||||||
files_struct *fsp = NULL;
|
files_struct *fsp = NULL;
|
||||||
|
|
||||||
if (!smb2req->subreq) {
|
if (!smb2req->subreq) {
|
||||||
@ -690,34 +692,30 @@ static void reprocess_blocked_smb2_lock(struct smbd_smb2_request *smb2req,
|
|||||||
blr = state->blr;
|
blr = state->blr;
|
||||||
fsp = blr->fsp;
|
fsp = blr->fsp;
|
||||||
|
|
||||||
/* Try and finish off getting all the outstanding locks. */
|
/* We can only have one blocked lock in SMB2. */
|
||||||
|
SMB_ASSERT(state->lock_count == 1);
|
||||||
|
SMB_ASSERT(blr->lock_num == 0);
|
||||||
|
|
||||||
for (; blr->lock_num < state->lock_count; blr->lock_num++) {
|
/* Try and get the outstanding lock. */
|
||||||
struct byte_range_lock *br_lck = NULL;
|
e = &state->locks[blr->lock_num];
|
||||||
struct smbd_lock_element *e = &state->locks[blr->lock_num];
|
|
||||||
|
|
||||||
br_lck = do_lock(fsp->conn->sconn->msg_ctx,
|
br_lck = do_lock(fsp->conn->sconn->msg_ctx,
|
||||||
fsp,
|
fsp,
|
||||||
e->smblctx,
|
e->smblctx,
|
||||||
e->count,
|
e->count,
|
||||||
e->offset,
|
e->offset,
|
||||||
e->brltype,
|
e->brltype,
|
||||||
WINDOWS_LOCK,
|
WINDOWS_LOCK,
|
||||||
true,
|
true,
|
||||||
&status,
|
&status,
|
||||||
&blr->blocking_smblctx,
|
&blr->blocking_smblctx,
|
||||||
blr);
|
blr);
|
||||||
|
|
||||||
TALLOC_FREE(br_lck);
|
TALLOC_FREE(br_lck);
|
||||||
|
|
||||||
if (NT_STATUS_IS_ERR(status)) {
|
if (NT_STATUS_IS_OK(status)) {
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(blr->lock_num == state->lock_count) {
|
|
||||||
/*
|
/*
|
||||||
* Success - we got all the locks.
|
* Success - we got the lock.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
DEBUG(3,("reprocess_blocked_smb2_lock SUCCESS file = %s, "
|
DEBUG(3,("reprocess_blocked_smb2_lock SUCCESS file = %s, "
|
||||||
@ -742,7 +740,7 @@ static void reprocess_blocked_smb2_lock(struct smbd_smb2_request *smb2req,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We couldn't get the locks for this record on the list.
|
* We couldn't get the lock for this record.
|
||||||
* If the time has expired, return a lock error.
|
* If the time has expired, return a lock error.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -754,18 +752,15 @@ static void reprocess_blocked_smb2_lock(struct smbd_smb2_request *smb2req,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Still can't get all the locks - keep waiting.
|
* Still can't get the lock - keep waiting.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
DEBUG(10,("reprocess_blocked_smb2_lock: only got %d locks of %d needed "
|
DEBUG(10,("reprocess_blocked_smb2_lock: failed to get lock "
|
||||||
"for file %s, %s. Still waiting....\n",
|
"for file %s, %s. Still waiting....\n",
|
||||||
(int)blr->lock_num,
|
|
||||||
(int)state->lock_count,
|
|
||||||
fsp_str_dbg(fsp),
|
fsp_str_dbg(fsp),
|
||||||
fsp_fnum_dbg(fsp)));
|
fsp_fnum_dbg(fsp)));
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************
|
/****************************************************************
|
||||||
|
Loading…
Reference in New Issue
Block a user