1
0
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:
Jeremy Allison 2014-06-26 12:01:56 -07:00 committed by Volker Lendecke
parent 508c09c6a0
commit 1a02a1e6aa

View File

@ -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;
} }
/**************************************************************** /****************************************************************