diff options
author | Shyam Prasad N <sprasad@microsoft.com> | 2021-11-17 18:57:22 +0300 |
---|---|---|
committer | Steve French <stfrench@microsoft.com> | 2022-01-19 20:10:54 +0300 |
commit | a05885ce13bd5ec9602551e32dfb1a4f26bfa542 (patch) | |
tree | 94a1cac46336c579e214e46dc7e34cb519ddbd71 /fs/cifs/transport.c | |
parent | 3663c9045f51a7ad635a0785adef07c21b79b560 (diff) | |
download | linux-a05885ce13bd5ec9602551e32dfb1a4f26bfa542.tar.xz |
cifs: fix the connection state transitions with multichannel
Recent changes to multichannel required some adjustments in
the way connection states transitioned during/after reconnect.
Also some minor fixes:
1. A pending switch of GlobalMid_Lock to cifs_tcp_ses_lock
2. Relocations of the code that logs reconnect
3. Changed some code in allocate_mid to suit the new scheme
Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
Diffstat (limited to 'fs/cifs/transport.c')
-rw-r--r-- | fs/cifs/transport.c | 14 |
1 files changed, 2 insertions, 12 deletions
diff --git a/fs/cifs/transport.c b/fs/cifs/transport.c index 93f0e8c1ea23..548cb376942e 100644 --- a/fs/cifs/transport.c +++ b/fs/cifs/transport.c @@ -431,7 +431,8 @@ unmask: * socket so the server throws away the partial SMB */ spin_lock(&cifs_tcp_ses_lock); - server->tcpStatus = CifsNeedReconnect; + if (server->tcpStatus != CifsExiting) + server->tcpStatus = CifsNeedReconnect; spin_unlock(&cifs_tcp_ses_lock); trace_smb3_partial_send_reconnect(server->CurrentMid, server->conn_id, server->hostname); @@ -729,17 +730,6 @@ static int allocate_mid(struct cifs_ses *ses, struct smb_hdr *in_buf, struct mid_q_entry **ppmidQ) { spin_lock(&cifs_tcp_ses_lock); - if (ses->server->tcpStatus == CifsExiting) { - spin_unlock(&cifs_tcp_ses_lock); - return -ENOENT; - } - - if (ses->server->tcpStatus == CifsNeedReconnect) { - spin_unlock(&cifs_tcp_ses_lock); - cifs_dbg(FYI, "tcp session dead - return to caller to retry\n"); - return -EAGAIN; - } - if (ses->status == CifsNew) { if ((in_buf->Command != SMB_COM_SESSION_SETUP_ANDX) && (in_buf->Command != SMB_COM_NEGOTIATE)) { |