diff options
author | Long Li <longli@microsoft.com> | 2020-04-01 01:21:43 +0200 |
---|---|---|
committer | Steve French <stfrench@microsoft.com> | 2020-04-07 19:41:16 +0200 |
commit | eda1c54f148a86f5e64d4d1d3f62d9ea7f94c17e (patch) | |
tree | dc8347065b8ef15630328e370a01940294c2b010 /fs/cifs/smb2proto.h | |
parent | cifs: smbd: Update receive credits before sending and deal with credits roll ... (diff) | |
download | linux-eda1c54f148a86f5e64d4d1d3f62d9ea7f94c17e.tar.xz linux-eda1c54f148a86f5e64d4d1d3f62d9ea7f94c17e.zip |
cifs: Allocate crypto structures on the fly for calculating signatures of incoming packets
CIFS uses pre-allocated crypto structures to calculate signatures for both
incoming and outgoing packets. In this way it doesn't need to allocate crypto
structures for every packet, but it requires a lock to prevent concurrent
access to crypto structures.
Remove the lock by allocating crypto structures on the fly for
incoming packets. At the same time, we can still use pre-allocated crypto
structures for outgoing packets, as they are already protected by transport
lock srv_mutex.
Signed-off-by: Long Li <longli@microsoft.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
Diffstat (limited to 'fs/cifs/smb2proto.h')
-rw-r--r-- | fs/cifs/smb2proto.h | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/fs/cifs/smb2proto.h b/fs/cifs/smb2proto.h index 4d1ff7b66fdc..087d5f14320b 100644 --- a/fs/cifs/smb2proto.h +++ b/fs/cifs/smb2proto.h @@ -55,9 +55,11 @@ extern struct cifs_ses *smb2_find_smb_ses(struct TCP_Server_Info *server, extern struct cifs_tcon *smb2_find_smb_tcon(struct TCP_Server_Info *server, __u64 ses_id, __u32 tid); extern int smb2_calc_signature(struct smb_rqst *rqst, - struct TCP_Server_Info *server); + struct TCP_Server_Info *server, + bool allocate_crypto); extern int smb3_calc_signature(struct smb_rqst *rqst, - struct TCP_Server_Info *server); + struct TCP_Server_Info *server, + bool allocate_crypto); extern void smb2_echo_request(struct work_struct *work); extern __le32 smb2_get_lease_state(struct cifsInodeInfo *cinode); extern bool smb2_is_valid_oplock_break(char *buffer, |