cifs: support nested dfs links over reconnect
Mounting a dfs link that has nested links was already supported at mount(2), so make it work over reconnect as well. Make the following case work: * mount //root/dfs/link /mnt -o ... - final share: /server/share * in server settings - change target folder of /root/dfs/link3 to /server/share2 - change target folder of /root/dfs/link2 to /root/dfs/link3 - change target folder of /root/dfs/link to /root/dfs/link2 * mount -o remount,... /mnt - refresh all dfs referrals - mark current connection for failover - cifs_reconnect() reconnects to root server - tree_connect() * checks that /root/dfs/link2 is a link, then chase it * checks that root/dfs/link3 is a link, then chase it * finally tree connect to /server/share2 If the mounted share is no longer accessible and a reconnect had been triggered, the client will retry it from both last referral path (/root/dfs/link3) and original referral path (/root/dfs/link). Any new referral paths found while chasing dfs links over reconnect, it will be updated to TCP_Server_Info::leaf_fullpath, accordingly. Signed-off-by:Paulo Alcantara (SUSE) <pc@cjr.nz> Signed-off-by:
Steve French <stfrench@microsoft.com>
Showing
- fs/cifs/cifs_dfs_ref.c 2 additions, 57 deletionsfs/cifs/cifs_dfs_ref.c
- fs/cifs/cifs_fs_sb.h 0 additions, 5 deletionsfs/cifs/cifs_fs_sb.h
- fs/cifs/cifsglob.h 23 additions, 1 deletionfs/cifs/cifsglob.h
- fs/cifs/cifsproto.h 4 additions, 1 deletionfs/cifs/cifsproto.h
- fs/cifs/connect.c 578 additions, 560 deletionsfs/cifs/connect.c
- fs/cifs/dfs_cache.c 36 additions, 8 deletionsfs/cifs/dfs_cache.c
- fs/cifs/misc.c 5 additions, 57 deletionsfs/cifs/misc.c
- fs/cifs/smb2ops.c 7 additions, 3 deletionsfs/cifs/smb2ops.c
- fs/cifs/smb2pdu.c 5 additions, 1 deletionfs/cifs/smb2pdu.c
Loading
Please register or sign in to comment