]> git.ipfire.org Git - people/ms/linux.git/commitdiff
cifs: fix the cifs_reconnect path for DFS
authorShyam Prasad N <sprasad@microsoft.com>
Sun, 16 Jan 2022 11:19:36 +0000 (11:19 +0000)
committerSteve French <stfrench@microsoft.com>
Wed, 19 Jan 2022 17:10:55 +0000 (11:10 -0600)
Recently, the cifs_reconnect code was refactored into
two branches for regular vs dfs codepath. Some of my
recent changes were missing in the dfs path, namely the
code to enable periodic DNS query, and a missing lock.

Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/cifs/connect.c

index d643f9e16f4eadb7977fa1d92b1e1816622eb2d6..4a31a9b3f34f432e631ba477113b3260cc8e0d63 100644 (file)
@@ -338,8 +338,10 @@ static int __cifs_reconnect(struct TCP_Server_Info *server,
                }
        } while (server->tcpStatus == CifsNeedReconnect);
 
+       spin_lock(&cifs_tcp_ses_lock);
        if (server->tcpStatus == CifsNeedNegotiate)
                mod_delayed_work(cifsiod_wq, &server->echo, 0);
+       spin_unlock(&cifs_tcp_ses_lock);
 
        wake_up(&server->response_q);
        return rc;
@@ -454,6 +456,7 @@ reconnect_dfs_server(struct TCP_Server_Info *server,
                spin_unlock(&cifs_tcp_ses_lock);
                cifs_swn_reset_server_dstaddr(server);
                mutex_unlock(&server->srv_mutex);
+               mod_delayed_work(cifsiod_wq, &server->reconnect, 0);
        } while (server->tcpStatus == CifsNeedReconnect);
 
        if (target_hint)