/* If server is a channel, select the primary channel */
        pserver = SERVER_IS_CHAN(server) ? server->primary_server : server;
 
+       /*
+        * if the server has been marked for termination, there is a
+        * chance that the remaining channels all need reconnect. To be
+        * on the safer side, mark the session and trees for reconnect
+        * for this scenario. This might cause a few redundant session
+        * setup and tree connect requests, but it is better than not doing
+        * a tree connect when needed, and all following requests failing
+        */
+       if (server->terminate) {
+               mark_smb_session = true;
+               server = pserver;
+       }
 
        spin_lock(&cifs_tcp_ses_lock);
        list_for_each_entry_safe(ses, nses, &pserver->smb_ses_list, smb_ses_list) {
-               /*
-                * if channel has been marked for termination, nothing to do
-                * for the channel. in fact, we cannot find the channel for the
-                * server. So safe to exit here
-                */
-               if (server->terminate)
-                       break;
-
                /* check if iface is still active */
                if (!cifs_chan_is_iface_active(ses, server))
                        cifs_chan_update_iface(ses, server);