]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
smbd: Add "lock_flav" to smbd_do_unlocking()
authorVolker Lendecke <vl@samba.org>
Fri, 14 Jun 2019 11:39:04 +0000 (04:39 -0700)
committerJeremy Allison <jra@samba.org>
Thu, 20 Jun 2019 17:18:17 +0000 (17:18 +0000)
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 <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/smbd/globals.h
source3/smbd/reply.c
source3/smbd/smb2_lock.c

index 10f6e60a50fd90c0ef1feeb37a4f3a825c729cd7..3494d8239392ecb41bfcc39e815ea207aff9baa1 100644 (file)
@@ -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,
index 4fd2f1cec8d5f7124a1b22d3096e88bab0e00b7d..2f5abbd13e6a76b55770eec0f2a29c16e57b73d5 100644 (file)
@@ -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);
index fc3ee315ecfd424c661ec489f7feef01c16725c7..ec2779ead75ad929ecba27270aff670c3c26c314 100644 (file)
@@ -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,