linux/fs/cifs
Shyam Prasad N 73f9bfbe3d cifs: maintain a state machine for tcp/smb/tcon sessions
If functions like cifs_negotiate_protocol, cifs_setup_session,
cifs_tree_connect are called in parallel on different channels,
each of these will be execute the requests. This maybe unnecessary
in some cases, and only the first caller may need to do the work.

This is achieved by having more states for the tcp/smb/tcon session
status fields. And tracking the state of reconnection based on the
state machine.

For example:
for tcp connections:
CifsNew/CifsNeedReconnect ->
  CifsNeedNegotiate ->
    CifsInNegotiate ->
      CifsNeedSessSetup ->
        CifsInSessSetup ->
          CifsGood

for smb sessions:
CifsNew/CifsNeedReconnect ->
  CifsGood

for tcon:
CifsNew/CifsNeedReconnect ->
  CifsInFilesInvalidate ->
    CifsNeedTcon ->
      CifsInTcon ->
        CifsGood

If any channel reconnect sees that it's in the middle of
transition to CifsGood, then they can skip the function.

Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
2022-01-07 20:09:22 -06:00
..
asn1.c cifs: decoding negTokenInit with generic ASN1 decoder 2021-06-20 21:28:17 -05:00
cache.c cifs: remove pathname for file from SPDX header 2021-09-13 14:51:10 -05:00
cifs_debug.c cifs: adjust DebugData to use chans_need_reconnect for conn status 2022-01-02 20:38:46 -06:00
cifs_debug.h cifs: use SPDX-Licence-Identifier 2021-06-20 21:28:17 -05:00
cifs_dfs_ref.c cifs: support nested dfs links over reconnect 2021-11-10 16:30:13 -06:00
cifs_fs_sb.h cifs: support nested dfs links over reconnect 2021-11-10 16:30:13 -06:00
cifs_ioctl.h cifs: remove pathname for file from SPDX header 2021-09-13 14:51:10 -05:00
cifs_spnego_negtokeninit.asn1 cifs: decoding negTokenInit with generic ASN1 decoder 2021-06-20 21:28:17 -05:00
cifs_spnego.c cifs: use the chans_need_reconnect bitmap for reconnect status 2022-01-02 20:38:46 -06:00
cifs_spnego.h cifs: use the chans_need_reconnect bitmap for reconnect status 2022-01-02 20:38:46 -06:00
cifs_swn.c cifs: take cifs_tcp_ses_lock for status checks 2022-01-07 20:07:07 -06:00
cifs_swn.h cifs: simplify SWN code with dummy funcs instead of ifdefs 2021-04-25 16:28:22 -05:00
cifs_unicode.c cifs: remove pathname for file from SPDX header 2021-09-13 14:51:10 -05:00
cifs_unicode.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
cifs_uniupr.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
cifsacl.c cifs: remove pathname for file from SPDX header 2021-09-13 14:51:10 -05:00
cifsacl.h cifs: remove pathname for file from SPDX header 2021-09-13 14:51:10 -05:00
cifsencrypt.c cifs: take cifs_tcp_ses_lock for status checks 2022-01-07 20:07:07 -06:00
cifsfs.c cifs: remove redundant assignment to pointer p 2022-01-02 20:38:45 -06:00
cifsfs.h cifs: update internal version number 2021-11-23 10:07:15 -06:00
cifsglob.h cifs: maintain a state machine for tcp/smb/tcon sessions 2022-01-07 20:09:22 -06:00
cifspdu.h cifs: remove pathname for file from SPDX header 2021-09-13 14:51:10 -05:00
cifsproto.h cifs: reconnect only the connection and not smb session where possible 2022-01-02 20:38:46 -06:00
cifsroot.c cifs: Standardize logging output 2020-06-01 00:10:18 -05:00
cifssmb.c cifs: maintain a state machine for tcp/smb/tcon sessions 2022-01-07 20:09:22 -06:00
connect.c cifs: maintain a state machine for tcp/smb/tcon sessions 2022-01-07 20:09:22 -06:00
dfs_cache.c cifs: introduce cifs_ses_mark_for_reconnect() helper 2021-11-16 10:57:08 -06:00
dfs_cache.h cifs: support share failover when remounting 2021-07-22 11:43:23 -05:00
dir.c cifs: remove pathname for file from SPDX header 2021-09-13 14:51:10 -05:00
dns_resolve.c cifs: remove pathname for file from SPDX header 2021-09-13 14:51:10 -05:00
dns_resolve.h cifs: remove pathname for file from SPDX header 2021-09-13 14:51:10 -05:00
export.c cifs: remove pathname for file from SPDX header 2021-09-13 14:51:10 -05:00
file.c smb3: do not error on fsync when readonly 2021-11-10 16:28:27 -06:00
fs_context.c cifs: sanitize multiple delimiters in prepath 2021-12-17 19:16:49 -06:00
fs_context.h cifs: send workstation name during ntlmssp session setup 2021-11-08 13:07:56 -06:00
fscache.c cifs: avoid use of dstaddr as key for fscache client cookie 2021-12-03 12:38:25 -06:00
fscache.h cifs: remove pathname for file from SPDX header 2021-09-13 14:51:10 -05:00
inode.c cifs: ignore resource_id while getting fscache super cookie 2021-12-17 19:09:06 -06:00
ioctl.c cifs: fix incorrect kernel doc comments 2021-09-13 18:29:46 -05:00
Kconfig cifs: create a MD4 module and switch cifs.ko to use it 2021-08-25 15:48:00 -05:00
link.c cifs: remove pathname for file from SPDX header 2021-09-13 14:51:10 -05:00
Makefile cifs: decoding negTokenInit with generic ASN1 decoder 2021-06-20 21:28:17 -05:00
misc.c cifs: protect session channel fields with chan_lock 2021-11-12 16:22:20 -06:00
netlink.c cifs: Constify static struct genl_ops 2021-06-20 21:28:16 -05:00
netlink.h cifs: Register generic netlink family 2020-12-14 09:16:22 -06:00
netmisc.c cifs: take cifs_tcp_ses_lock for status checks 2022-01-07 20:07:07 -06:00
nterr.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 61 2019-05-24 17:36:45 +02:00
nterr.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 61 2019-05-24 17:36:45 +02:00
ntlmssp.h cifs: use the chans_need_reconnect bitmap for reconnect status 2022-01-02 20:38:46 -06:00
readdir.c cifs: remove pathname for file from SPDX header 2021-09-13 14:51:10 -05:00
rfc1002pdu.h cifs: remove pathname for file from SPDX header 2021-09-13 14:51:10 -05:00
sess.c cifs: maintain a state machine for tcp/smb/tcon sessions 2022-01-07 20:09:22 -06:00
smb1ops.c cifs: fix hang on cifs_get_next_mid() 2022-01-07 20:07:11 -06:00
smb2file.c cifs: remove pathname for file from SPDX header 2021-09-13 14:51:10 -05:00
smb2glob.h cifs: remove pathname for file from SPDX header 2021-09-13 14:51:10 -05:00
smb2inode.c cifs: for compound requests, use open handle if possible 2021-11-10 11:05:20 -06:00
smb2maperror.c cifs: Create a new shared file holding smb2 pdu definitions 2021-11-05 09:50:57 -05:00
smb2misc.c cifs: use the chans_need_reconnect bitmap for reconnect status 2022-01-02 20:38:46 -06:00
smb2ops.c cifs: take cifs_tcp_ses_lock for status checks 2022-01-07 20:07:07 -06:00
smb2pdu.c cifs: maintain a state machine for tcp/smb/tcon sessions 2022-01-07 20:09:22 -06:00
smb2pdu.h cifs: Move SMB2_Create definitions to the shared area 2021-11-05 09:55:36 -05:00
smb2proto.h cifs: use the chans_need_reconnect bitmap for reconnect status 2022-01-02 20:38:46 -06:00
smb2status.h cifs: remove pathname for file from SPDX header 2021-09-13 14:51:10 -05:00
smb2transport.c cifs: take cifs_tcp_ses_lock for status checks 2022-01-07 20:07:07 -06:00
smbdirect.c smbdirect: missing rc checks while waiting for rdma events 2021-06-22 12:08:32 -05:00
smbdirect.h cifs: smbd: Do not schedule work to send immediate packet on every receive 2020-04-07 12:41:16 -05:00
smbencrypt.c cifs: rename cifs_common to smbfs_common 2021-09-08 23:59:26 -05:00
smberr.h cifs: remove pathname for file from SPDX header 2021-09-13 14:51:10 -05:00
trace.c smb3: Cleanup license mess 2019-01-24 09:37:33 -06:00
trace.h smb3: add dynamic trace points for socket connection 2021-11-05 16:20:24 -05:00
transport.c cifs: take cifs_tcp_ses_lock for status checks 2022-01-07 20:07:07 -06:00
unc.c cifs: don't cargo-cult strndup() 2021-04-25 16:28:23 -05:00
winucase.c cifs: remove pathname for file from SPDX header 2021-09-13 14:51:10 -05:00
xattr.c cifs: remove pathname for file from SPDX header 2021-09-13 14:51:10 -05:00