]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
cifs: ignore ipc reconnect failures during dfs failover
authorPaulo Alcantara <pc@cjr.nz>
Thu, 29 Dec 2022 15:33:55 +0000 (12:33 -0300)
committerSteve French <stfrench@microsoft.com>
Wed, 4 Jan 2023 06:10:19 +0000 (00:10 -0600)
If it failed to reconnect ipc used for getting referrals, we can just
ignore it as it is not required for reconnecting the share.  The worst
case would be not being able to detect or chase nested links as long
as dfs root server is unreachable.

Before patch:

  $ mount.cifs //root/dfs/link /mnt -o echo_interval=10,...
    -> target share: /fs0/share

  disconnect root & fs0

  $ ls /mnt
  ls: cannot access '/mnt': Host is down

  connect fs0

  $ ls /mnt
  ls: cannot access '/mnt': Resource temporarily unavailable

After patch:

  $ mount.cifs //root/dfs/link /mnt -o echo_interval=10,...
    -> target share: /fs0/share

  disconnect root & fs0

  $ ls /mnt
  ls: cannot access '/mnt': Host is down

  connect fs0

  $ ls /mnt
  bar.rtf  dir1  foo

Signed-off-by: Paulo Alcantara (SUSE) <pc@cjr.nz>
Reviewed-by: Enzo Matsumiya <ematsumiya@suse.de>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/cifs/dfs.c

index b541e68378f647c2b89d891952bfa0e0362649d2..30086f2060a1025a5ed15f28d83c068fcc99213b 100644 (file)
@@ -401,8 +401,7 @@ static int __tree_connect_dfs_target(const unsigned int xid, struct cifs_tcon *t
                if (ipc->need_reconnect) {
                        scnprintf(tree, MAX_TREE_SIZE, "\\\\%s\\IPC$", server->hostname);
                        rc = ops->tree_connect(xid, ipc->ses, tree, ipc, cifs_sb->local_nls);
-                       if (rc)
-                               break;
+                       cifs_dbg(FYI, "%s: reconnect ipc: %d\n", __func__, rc);
                }
 
                scnprintf(tree, MAX_TREE_SIZE, "\\%s", share);