cifs: fix sharing of DFS connections
authorPaulo Alcantara <pc@manguebit.com>
Mon, 24 Apr 2023 02:26:51 +0000 (23:26 -0300)
committerSteve French <stfrench@microsoft.com>
Thu, 4 May 2023 21:54:44 +0000 (16:54 -0500)
commit8e3554150d6c80a84b3cb046615d1a0e943811dc
tree6c90574389254fe3e7881bddd59483d676736783
parent6be2ea33a4093402252724a00c4af8033725184c
cifs: fix sharing of DFS connections

When matching DFS connections, we can't rely on the values set in
cifs_sb_info::prepath and cifs_tcon::tree_name as they might change
during DFS failover.  The DFS referrals related to a specific DFS tcon
are already matched earlier in match_server(), therefore we can safely
skip those checks altogether as the connection is guaranteed to be
unique for the DFS tcon.

Besides, when creating or finding an SMB session, make sure to also
refcount any DFS root session related to it (cifs_ses::dfs_root_ses),
so if a new DFS mount ends up reusing the connection from the old
mount while there was an umount(2) still in progress (e.g. umount(2)
-> cifs_umount() -> reconnect -> cifs_put_tcon()), the connection
could potentially be put right after the umount(2) finished.

Patch has minor update to include fix for unused variable issue
noted by the kernel test robot

Reported-by: kernel test robot <lkp@intel.com>
Link: https://lore.kernel.org/oe-kbuild-all/202305041040.j7W2xQSy-lkp@intel.com/
Cc: stable@vger.kernel.org # v6.2+
Signed-off-by: Paulo Alcantara (SUSE) <pc@manguebit.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/cifs/cifsglob.h
fs/cifs/cifsproto.h
fs/cifs/connect.c
fs/cifs/dfs.c
fs/cifs/ioctl.c
fs/cifs/smb2pdu.c