linux/fs/smb/client
Shyam Prasad N c55901d381 cifs: fix mid leak during reconnection after timeout threshold
[ Upstream commit 69cba9d3c1 ]

When the number of responses with status of STATUS_IO_TIMEOUT
exceeds a specified threshold (NUM_STATUS_IO_TIMEOUT), we reconnect
the connection. But we do not return the mid, or the credits
returned for the mid, or reduce the number of in-flight requests.

This bug could result in the server->in_flight count to go bad,
and also cause a leak in the mids.

This change moves the check to a few lines below where the
response is decrypted, even of the response is read from the
transform header. This way, the code for returning the mids
can be reused.

Also, the cifs_reconnect was reconnecting just the transport
connection before. In case of multi-channel, this may not be
what we want to do after several timeouts. Changed that to
reconnect the session and the tree too.

Also renamed NUM_STATUS_IO_TIMEOUT to a more appropriate name
MAX_STATUS_IO_TIMEOUT.

Fixes: 8e670f77c4 ("Handle STATUS_IO_TIMEOUT gracefully")
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>
History 2023-07-27 08:50:40 +02:00
..
asn1.c smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
cached_dir.c smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
cached_dir.h smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
cifs_debug.c smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
cifs_debug.h smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
cifs_dfs_ref.c smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
cifs_fs_sb.h smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
cifs_ioctl.h smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
cifs_spnego.c smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
cifs_spnego.h smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
cifs_spnego_negtokeninit.asn1 smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
cifs_swn.c smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
cifs_swn.h smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
cifs_unicode.c smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
cifs_unicode.h smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
cifs_uniupr.h smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
cifsacl.c smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
cifsacl.h smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
cifsencrypt.c smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
cifsfs.c smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
cifsfs.h smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
cifsglob.h smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
cifspdu.h smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
cifsproto.h smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
cifsroot.c smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
cifssmb.c smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
connect.c cifs: fix mid leak during reconnection after timeout threshold 2023-07-27 08:50:40 +02:00
dfs_cache.c smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
dfs_cache.h smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
dir.c smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
dns_resolve.c smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
dns_resolve.h smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
export.c smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
file.c cifs: if deferred close is disabled then close files immediately 2023-07-23 13:49:45 +02:00
fs_context.c smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
fs_context.h smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
fscache.c smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
fscache.h smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
inode.c smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
ioctl.c smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
Kconfig smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
link.c smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
Makefile smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
misc.c smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
netlink.c smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
netlink.h smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
netmisc.c smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
nterr.c smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
nterr.h smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
ntlmssp.h smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
readdir.c smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
rfc1002pdu.h smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
sess.c smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
smb1ops.c smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
smb2file.c smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
smb2glob.h smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
smb2inode.c smb: client: fix broken file attrs with nodfs mounts 2023-07-19 16:21:44 +02:00
smb2maperror.c smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
smb2misc.c smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
smb2ops.c cifs: do all necessary checks for credits within or before locking 2023-07-19 16:21:44 +02:00
smb2pdu.c smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
smb2pdu.h smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
smb2proto.h smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
smb2status.h smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
smb2transport.c cifs: fix session state check in smb2_find_smb_ses 2023-07-23 13:49:28 +02:00
smbdirect.c smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
smbdirect.h smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
smbencrypt.c smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
smberr.h smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
trace.c smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
trace.h smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
transport.c cifs: do all necessary checks for credits within or before locking 2023-07-19 16:21:44 +02:00
unc.c smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
winucase.c smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00
xattr.c smb: move client and server files to common directory fs/smb 2023-06-28 11:12:40 +02:00