]> git.hungrycats.org Git - linux/commit
cifs: do all necessary checks for credits within or before locking
authorShyam Prasad N <sprasad@microsoft.com>
Thu, 22 Jun 2023 18:16:04 +0000 (18:16 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 11 Jul 2023 17:39:51 +0000 (19:39 +0200)
commita8c3f20e534a6a1535fa1312936af6ceb043901e
tree544774239efb197845384f61a67104d04b9e27bc
parentb6353518ef8180816e863aa23b06456f395404d6
cifs: do all necessary checks for credits within or before locking

[ Upstream commit 326a8d04f147e2bf393f6f9cdb74126ee6900607 ]

All the server credits and in-flight info is protected by req_lock.
Once the req_lock is held, and we've determined that we have enough
credits to continue, this lock cannot be dropped till we've made the
changes to credits and in-flight count.

However, we used to drop the lock in order to avoid deadlock with
the recent srv_lock. This could cause the checks already made to be
invalidated.

Fixed it by moving the server status check to before locking req_lock.

Fixes: d7d7a66aacd6 ("cifs: avoid use of global locks for high contention data")
Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/cifs/smb2ops.c
fs/cifs/transport.c