cifs_mark_tcp_ses_conns_for_reconnect(struct TCP_Server_Info *server,
bool mark_smb_session)
{
- unsigned int num_sessions = 0;
+ struct TCP_Server_Info *pserver;
struct cifs_ses *ses;
struct cifs_tcon *tcon;
struct mid_q_entry *mid, *nmid;
struct list_head retry_list;
- struct TCP_Server_Info *pserver;
server->maxBuf = 0;
server->max_read = 0;
if (!mark_smb_session && cifs_chan_needs_reconnect(ses, server))
goto next_session;
- if (mark_smb_session)
- CIFS_SET_ALL_CHANS_NEED_RECONNECT(ses);
- else
- cifs_chan_set_need_reconnect(ses, server);
+ cifs_chan_set_need_reconnect(ses, server);
/* If all channels need reconnect, then tcon needs reconnect */
if (!mark_smb_session && !CIFS_ALL_CHANS_NEED_RECONNECT(ses))
goto next_session;
ses->status = CifsNeedReconnect;
- num_sessions++;
list_for_each_entry(tcon, &ses->tcon_list, tcon_list) {
tcon->need_reconnect = true;
}
spin_unlock(&cifs_tcp_ses_lock);
- if (num_sessions == 0)
- return;
/*
* before reconnecting the tcp session, mark the smb session (uid)
* and the tid bad so they are not used until reconnected
*/
- cifs_dbg(FYI, "%s: marking sessions and tcons for reconnect\n",
+ cifs_dbg(FYI, "%s: marking sessions and tcons for reconnect and tearing down socket\n",
__func__);
/* do not want to be sending data on a socket we are freeing */
- cifs_dbg(FYI, "%s: tearing down socket\n", __func__);
mutex_lock(&server->srv_mutex);
if (server->ssocket) {
cifs_dbg(FYI, "State: 0x%x Flags: 0x%lx\n", server->ssocket->state,
if (tcon->need_reconnect)
goto skip_sess_setup;
- rc = -EHOSTDOWN;
goto out;
}
spin_unlock(&ses->chan_lock);
.rq_nvec = 1 };
unsigned int total_len;
- cifs_dbg(FYI, "In echo request\n");
+ cifs_dbg(FYI, "In echo request for conn_id %lld\n", server->conn_id);
spin_lock(&cifs_tcp_ses_lock);
if (server->tcpStatus == CifsNeedNegotiate) {
if (!ses)
return NULL;
- spin_lock(&ses->chan_lock);
/* round robin */
-pick_another:
- if (ses->chan_count > 1 &&
- !CIFS_ALL_CHANS_NEED_RECONNECT(ses)) {
- index = (uint)atomic_inc_return(&ses->chan_seq);
- index %= ses->chan_count;
-
- if (CIFS_CHAN_NEEDS_RECONNECT(ses, index))
- goto pick_another;
- }
- spin_unlock(&ses->chan_lock);
+ index = (uint)atomic_inc_return(&ses->chan_seq);
+ index %= ses->chan_count;
return ses->chans[index].server;
}