From: Volker Lendecke Date: Fri, 14 Jun 2019 11:39:04 +0000 (-0700) Subject: smbd: Add "lock_flav" to smbd_do_unlocking() X-Git-Tag: ldb-2.0.5~335 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b3d533aa585a6d69855f10fafbf6d68e98597996;p=thirdparty%2Fsamba.git smbd: Add "lock_flav" to smbd_do_unlocking() The next commits will pass all direct "do_unlock" calls through smbd_do_unlocking(). Why? Unlocking will later on require that we take the share mode lock for the file in question while the unlock is happening, and this should be in one central place. Signed-off-by: Volker Lendecke Reviewed-by: Jeremy Allison --- diff --git a/source3/smbd/globals.h b/source3/smbd/globals.h index 10f6e60a50f..3494d823939 100644 --- a/source3/smbd/globals.h +++ b/source3/smbd/globals.h @@ -124,7 +124,8 @@ NTSTATUS smbd_do_locking(struct smb_request *req, NTSTATUS smbd_do_unlocking(struct smb_request *req, files_struct *fsp, uint16_t num_ulocks, - struct smbd_lock_element *ulocks); + struct smbd_lock_element *ulocks, + enum brl_flavour lock_flav); NTSTATUS smbd_do_qfilepathinfo(connection_struct *conn, TALLOC_CTX *mem_ctx, diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c index 4fd2f1cec8d..2f5abbd13e6 100644 --- a/source3/smbd/reply.c +++ b/source3/smbd/reply.c @@ -8220,7 +8220,8 @@ NTSTATUS smbd_do_locking(struct smb_request *req, NTSTATUS smbd_do_unlocking(struct smb_request *req, files_struct *fsp, uint16_t num_ulocks, - struct smbd_lock_element *ulocks) + struct smbd_lock_element *ulocks, + enum brl_flavour lock_flav) { uint16_t i; @@ -8245,7 +8246,7 @@ NTSTATUS smbd_do_unlocking(struct smb_request *req, e->smblctx, e->count, e->offset, - WINDOWS_LOCK); + lock_flav); DEBUG(10, ("%s: unlock returned %s\n", __func__, nt_errstr(status))); @@ -8410,7 +8411,7 @@ void reply_lockingX(struct smb_request *req) ulocks[i].brltype = UNLOCK_LOCK; } - status = smbd_do_unlocking(req, fsp, num_ulocks, ulocks); + status = smbd_do_unlocking(req, fsp, num_ulocks, ulocks, WINDOWS_LOCK); TALLOC_FREE(ulocks); if (!NT_STATUS_IS_OK(status)) { END_PROFILE(SMBlockingX); diff --git a/source3/smbd/smb2_lock.c b/source3/smbd/smb2_lock.c index fc3ee315ecf..ec2779ead75 100644 --- a/source3/smbd/smb2_lock.c +++ b/source3/smbd/smb2_lock.c @@ -348,8 +348,8 @@ static struct tevent_req *smbd_smb2_lock_send(TALLOC_CTX *mem_ctx, state->lock_count = in_lock_count; if (isunlock) { - status = smbd_do_unlocking(smb1req, fsp, - in_lock_count, locks); + status = smbd_do_unlocking( + smb1req, fsp, in_lock_count, locks, WINDOWS_LOCK); async = false; } else { status = smbd_do_locking(smb1req,