From: Volker Lendecke Date: Tue, 18 Sep 2018 08:53:23 +0000 (+0200) Subject: smbd: Factor out map_lease_type_to_oplock X-Git-Tag: tdb-1.4.1~481 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cc4513dd4d35f2d9ff4649f595bd85b0bb3a2fa3;p=thirdparty%2Fsamba.git smbd: Factor out map_lease_type_to_oplock grant_fsp_oplock_type has enough complex logic, make this a bit shorter Signed-off-by: Volker Lendecke Reviewed-by: Jeremy Allison --- diff --git a/source3/smbd/open.c b/source3/smbd/open.c index 22f6715c6c0..167d82f0b13 100644 --- a/source3/smbd/open.c +++ b/source3/smbd/open.c @@ -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)) {