smb: client: fix DFS failover in multiuser mounts
authorPaulo Alcantara <pc@manguebit.com>
Wed, 18 Sep 2024 05:04:23 +0000 (02:04 -0300)
committerSteve French <stfrench@microsoft.com>
Wed, 25 Sep 2024 02:51:48 +0000 (21:51 -0500)
For sessions and tcons created on behalf of new users accessing a
multiuser mount, matching their sessions in tcon_super_cb() with
master tcon will always lead to false as every new user will have its
own session and tcon.

All multiuser sessions, however, will inherit ->dfs_root_ses from
master tcon, so match it instead.

Signed-off-by: Paulo Alcantara (Red Hat) <pc@manguebit.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/smb/client/misc.c

index 47b861517bed53f18e981eb903576520b5f5eb14..054f10ebf65a5e03bdb947bf5eff734a9e71633e 100644 (file)
@@ -1111,7 +1111,8 @@ static void tcon_super_cb(struct super_block *sb, void *arg)
        t2 = cifs_sb_master_tcon(cifs_sb);
 
        spin_lock(&t2->tc_lock);
-       if (t1->ses == t2->ses &&
+       if ((t1->ses == t2->ses ||
+            t1->ses->dfs_root_ses == t2->ses->dfs_root_ses) &&
            t1->ses->server == t2->ses->server &&
            t2->origin_fullpath &&
            dfs_src_pathname_equal(t2->origin_fullpath, t1->origin_fullpath))