cifs: reconnect helper should set reconnect for the right channel
commit c3326a61cdbf3ce1273d9198b6cbf90965d7e029 upstream.
We introduced a helper function to be used by non-cifsd threads to
mark the connection for reconnect. For multichannel, when only
a particular channel needs to be reconnected, this had a bug.
This change fixes that by marking that particular channel
for reconnect.
Fixes: dca65818c8 ("cifs: use a different reconnect helper for non-cifsd threads")
Cc: stable@vger.kernel.org
Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
Reviewed-by: Paulo Alcantara (SUSE) <pc@manguebit.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
9eb44db68c
commit
5bdf34ca32
1 changed files with 5 additions and 4 deletions
|
|
@ -205,13 +205,14 @@ cifs_signal_cifsd_for_reconnect(struct TCP_Server_Info *server,
|
||||||
/* If server is a channel, select the primary channel */
|
/* If server is a channel, select the primary channel */
|
||||||
pserver = CIFS_SERVER_IS_CHAN(server) ? server->primary_server : server;
|
pserver = CIFS_SERVER_IS_CHAN(server) ? server->primary_server : server;
|
||||||
|
|
||||||
spin_lock(&pserver->srv_lock);
|
/* if we need to signal just this channel */
|
||||||
if (!all_channels) {
|
if (!all_channels) {
|
||||||
pserver->tcpStatus = CifsNeedReconnect;
|
spin_lock(&server->srv_lock);
|
||||||
spin_unlock(&pserver->srv_lock);
|
if (server->tcpStatus != CifsExiting)
|
||||||
|
server->tcpStatus = CifsNeedReconnect;
|
||||||
|
spin_unlock(&server->srv_lock);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
spin_unlock(&pserver->srv_lock);
|
|
||||||
|
|
||||||
spin_lock(&cifs_tcp_ses_lock);
|
spin_lock(&cifs_tcp_ses_lock);
|
||||||
list_for_each_entry(ses, &pserver->smb_ses_list, smb_ses_list) {
|
list_for_each_entry(ses, &pserver->smb_ses_list, smb_ses_list) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue