Made a bunch of fixes in mchan reconnect scenarios with these patches. The reconnect codepath did not play well with mchan. Making it work involved several changes described in the commits. https://github.com/sprasad-microsoft/smb-kernel-client/commit/03059a751fa7315ecd44ad61342200d20ab3f0cb.patch A trivial ref-counting fix in session find codepath. https://github.com/sprasad-microsoft/smb-kernel-client/commit/2615c7300f93a7ae2d9350da25ed117492f8edbf.patch Fixes in reconnect codepath, involving changes to introduce a per-channel bitmask for a session, instead of a boolean, and to reconnect the session only when we have all channels marked for reconnect. This makes sessions more resilient in mchan scenarios. https://github.com/sprasad-microsoft/smb-kernel-client/commit/5bcce1741beea482e770f1c25f4ff285a1505ca4.patch Fix to get rid of the serialization of requests during channel binding. This involved passing the channel server pointer to all negotiate and session setup related functions. This has increased the diff size, otherwise the changes are quite minimal. https://github.com/sprasad-microsoft/smb-kernel-client/pull/4 P.S. There is a logic in cifs_reconnect to switch between the targets for the server. I don't think these changes will break the DFS scenario. The code will likely take effect only for when the primary channel reconnects (as DFS server entries are cached with super block as the key). Perhaps more changes will be needed there to also switch between the targets for individual channels (maybe use superblock + channel num as the key for caching entries?). Folks with better knowledge than me with this code may want to check on this? @Steve French It'll be good to let a few cycles of buildbot to run with this code, before submitting to upstream. I have run a bunch of tests with this. However, more soak time will be safer. -- Regards, Shyam