smbd: Factor out map_lease_type_to_oplock
authorVolker Lendecke <vl@samba.org>
Tue, 18 Sep 2018 08:53:23 +0000 (10:53 +0200)
committerJeremy Allison <jra@samba.org>
Tue, 9 Apr 2019 18:29:14 +0000 (18:29 +0000)
grant_fsp_oplock_type has enough complex logic, make this a bit shorter

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/smbd/open.c

index 22f6715c6c03590a3ab1ed6bba04a63801963942..167d82f0b1392d2b16fc065e1efce28662fbadde 100644 (file)
@@ -2166,6 +2166,26 @@ static bool is_same_lease(const files_struct *fsp,
                                &d->leases[e->lease_idx].lease_key);
 }
 
+static int map_lease_type_to_oplock(uint32_t lease_type)
+{
+       int result = NO_OPLOCK;
+
+       switch (lease_type) {
+       case SMB2_LEASE_READ|SMB2_LEASE_WRITE|SMB2_LEASE_HANDLE:
+               result = BATCH_OPLOCK|EXCLUSIVE_OPLOCK;
+               break;
+       case SMB2_LEASE_READ|SMB2_LEASE_WRITE:
+               result = EXCLUSIVE_OPLOCK;
+               break;
+       case SMB2_LEASE_READ|SMB2_LEASE_HANDLE:
+       case SMB2_LEASE_READ:
+               result = LEVEL_II_OPLOCK;
+               break;
+       }
+
+       return result;
+}
+
 static NTSTATUS grant_fsp_oplock_type(struct smb_request *req,
                                      struct files_struct *fsp,
                                      struct share_mode_lock *lck,
@@ -2281,21 +2301,7 @@ static NTSTATUS grant_fsp_oplock_type(struct smb_request *req,
                        granted = SMB2_LEASE_NONE;
                }
 
-               switch (granted) {
-               case SMB2_LEASE_READ|SMB2_LEASE_WRITE|SMB2_LEASE_HANDLE:
-                       fsp->oplock_type = BATCH_OPLOCK|EXCLUSIVE_OPLOCK;
-                       break;
-               case SMB2_LEASE_READ|SMB2_LEASE_WRITE:
-                       fsp->oplock_type = EXCLUSIVE_OPLOCK;
-                       break;
-               case SMB2_LEASE_READ|SMB2_LEASE_HANDLE:
-               case SMB2_LEASE_READ:
-                       fsp->oplock_type = LEVEL_II_OPLOCK;
-                       break;
-               default:
-                       fsp->oplock_type = NO_OPLOCK;
-                       break;
-               }
+               fsp->oplock_type = map_lease_type_to_oplock(granted);
 
                status = set_file_oplock(fsp);
                if (!NT_STATUS_IS_OK(status)) {