cifs: change tcon status when need_reconnect is set on it
When a tcon is marked for need_reconnect, the intention is to have it reconnected. This change adjusts tcon->status in cifs_tree_connect when need_reconnect is set. Also, this change has a minor correction in resetting need_reconnect on success. It makes sure that it is done with tc_lock held. Signed-off-by: Shyam Prasad N <sprasad@microsoft.com> Signed-off-by: Steve French <stfrench@microsoft.com>
This commit is contained in:
parent
55c7788c37
commit
c6e02eefd6
@ -4228,6 +4228,11 @@ int cifs_tree_connect(const unsigned int xid, struct cifs_tcon *tcon, const stru
|
||||
|
||||
/* only send once per connect */
|
||||
spin_lock(&tcon->tc_lock);
|
||||
|
||||
/* if tcon is marked for needing reconnect, update state */
|
||||
if (tcon->need_reconnect)
|
||||
tcon->status = TID_NEED_TCON;
|
||||
|
||||
if (tcon->status == TID_GOOD) {
|
||||
spin_unlock(&tcon->tc_lock);
|
||||
return 0;
|
||||
|
@ -565,6 +565,11 @@ int cifs_tree_connect(const unsigned int xid, struct cifs_tcon *tcon, const stru
|
||||
|
||||
/* only send once per connect */
|
||||
spin_lock(&tcon->tc_lock);
|
||||
|
||||
/* if tcon is marked for needing reconnect, update state */
|
||||
if (tcon->need_reconnect)
|
||||
tcon->status = TID_NEED_TCON;
|
||||
|
||||
if (tcon->status == TID_GOOD) {
|
||||
spin_unlock(&tcon->tc_lock);
|
||||
return 0;
|
||||
@ -625,8 +630,8 @@ out:
|
||||
spin_lock(&tcon->tc_lock);
|
||||
if (tcon->status == TID_IN_TCON)
|
||||
tcon->status = TID_GOOD;
|
||||
spin_unlock(&tcon->tc_lock);
|
||||
tcon->need_reconnect = false;
|
||||
spin_unlock(&tcon->tc_lock);
|
||||
}
|
||||
|
||||
return rc;
|
||||
|
@ -175,6 +175,9 @@ cifs_mark_open_files_invalid(struct cifs_tcon *tcon)
|
||||
|
||||
/* only send once per connect */
|
||||
spin_lock(&tcon->tc_lock);
|
||||
if (tcon->need_reconnect)
|
||||
tcon->status = TID_NEED_RECON;
|
||||
|
||||
if (tcon->status != TID_NEED_RECON) {
|
||||
spin_unlock(&tcon->tc_lock);
|
||||
return;
|
||||
|
Loading…
Reference in New Issue
Block a user