[PATCH 2/4][groovy:linux] cifs: Simplify reconnect code when dfs upcall is enabled
Tim Gardner
tim.gardner at canonical.com
Thu Jun 17 17:36:43 UTC 2021
From: Samuel Cabrero <scabrero at suse.de>
BugLink: https://bugs.launchpad.net/bugs/1929831
Some witness notifications, like client move, tell the client to
reconnect to a specific IP address. In this situation the DFS failover
code path has to be skipped so clean up as much as possible the
cifs_reconnect() code.
Signed-off-by: Samuel Cabrero <scabrero at suse.de>
Reviewed-by: Aurelien Aptel <aaptel at suse.com>
Signed-off-by: Steve French <stfrench at microsoft.com>
(cherry picked from commit 7d6535b720421d58886d5590ffc3617d359aa871)
Signed-off-by: Tim Gardner <tim.gardner at canonical.com>
---
fs/cifs/connect.c | 21 ++++++++-------------
1 file changed, 8 insertions(+), 13 deletions(-)
diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
index 3ec356c3b0b5..21f60450682a 100644
--- a/fs/cifs/connect.c
+++ b/fs/cifs/connect.c
@@ -352,7 +352,7 @@ static char *extract_hostname(const char *unc);
* This should be called with server->srv_mutex held.
*/
#ifdef CONFIG_CIFS_DFS_UPCALL
-static int reconn_set_ipaddr(struct TCP_Server_Info *server)
+static int reconn_set_ipaddr_from_hostname(struct TCP_Server_Info *server)
{
int rc;
int len;
@@ -387,14 +387,7 @@ static int reconn_set_ipaddr(struct TCP_Server_Info *server)
return !rc ? -1 : 0;
}
-#else
-static inline int reconn_set_ipaddr(struct TCP_Server_Info *server)
-{
- return 0;
-}
-#endif
-#ifdef CONFIG_CIFS_DFS_UPCALL
/* These functions must be called with server->srv_mutex held */
static void reconn_set_next_dfs_target(struct TCP_Server_Info *server,
struct cifs_sb_info *cifs_sb,
@@ -402,6 +395,7 @@ static void reconn_set_next_dfs_target(struct TCP_Server_Info *server,
struct dfs_cache_tgt_iterator **tgt_it)
{
const char *name;
+ int rc;
if (!cifs_sb || !cifs_sb->origin_fullpath)
return;
@@ -426,6 +420,12 @@ static void reconn_set_next_dfs_target(struct TCP_Server_Info *server,
"%s: failed to extract hostname from target: %ld\n",
__func__, PTR_ERR(server->hostname));
}
+
+ rc = reconn_set_ipaddr_from_hostname(server);
+ if (rc) {
+ cifs_dbg(FYI, "%s: failed to resolve hostname: %d\n",
+ __func__, rc);
+ }
}
static inline int reconn_setup_dfs_targets(struct cifs_sb_info *cifs_sb,
@@ -582,11 +582,6 @@ cifs_reconnect(struct TCP_Server_Info *server)
*/
reconn_set_next_dfs_target(server, cifs_sb, &tgt_list, &tgt_it);
#endif
- rc = reconn_set_ipaddr(server);
- if (rc) {
- cifs_dbg(FYI, "%s: failed to resolve hostname: %d\n",
- __func__, rc);
- }
if (cifs_rdma_enabled(server))
rc = smbd_reconnect(server);
--
2.17.1
More information about the kernel-team
mailing list