Commit 4e456b30 authored by Shyam Prasad N's avatar Shyam Prasad N Committed by Steve French

cifs: On cifs_reconnect, resolve the hostname again.

On cifs_reconnect, make sure that DNS resolution happens again.
It could be the cause of connection to go dead in the first place.

This also contains the fix for a build issue identified by Intel bot.
Reported-by: default avatarkernel test robot <lkp@intel.com>
Signed-off-by: default avatarShyam Prasad N <sprasad@microsoft.com>
Reviewed-by: default avatarPaulo Alcantara (SUSE) <pc@cjr.nz>
Reviewed-by: default avatarPavel Shilovsky <pshilov@microsoft.com>
CC: <stable@vger.kernel.org> # 5.11+
Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
parent e49d033b
...@@ -18,6 +18,7 @@ config CIFS ...@@ -18,6 +18,7 @@ config CIFS
select CRYPTO_AES select CRYPTO_AES
select CRYPTO_LIB_DES select CRYPTO_LIB_DES
select KEYS select KEYS
select DNS_RESOLVER
help help
This is the client VFS module for the SMB3 family of NAS protocols, This is the client VFS module for the SMB3 family of NAS protocols,
(including support for the most recent, most secure dialect SMB3.1.1) (including support for the most recent, most secure dialect SMB3.1.1)
...@@ -112,7 +113,6 @@ config CIFS_WEAK_PW_HASH ...@@ -112,7 +113,6 @@ config CIFS_WEAK_PW_HASH
config CIFS_UPCALL config CIFS_UPCALL
bool "Kerberos/SPNEGO advanced session setup" bool "Kerberos/SPNEGO advanced session setup"
depends on CIFS depends on CIFS
select DNS_RESOLVER
help help
Enables an upcall mechanism for CIFS which accesses userspace helper Enables an upcall mechanism for CIFS which accesses userspace helper
utilities to provide SPNEGO packaged (RFC 4178) Kerberos tickets utilities to provide SPNEGO packaged (RFC 4178) Kerberos tickets
...@@ -179,7 +179,6 @@ config CIFS_DEBUG_DUMP_KEYS ...@@ -179,7 +179,6 @@ config CIFS_DEBUG_DUMP_KEYS
config CIFS_DFS_UPCALL config CIFS_DFS_UPCALL
bool "DFS feature support" bool "DFS feature support"
depends on CIFS depends on CIFS
select DNS_RESOLVER
help help
Distributed File System (DFS) support is used to access shares Distributed File System (DFS) support is used to access shares
transparently in an enterprise name space, even if the share transparently in an enterprise name space, even if the share
......
...@@ -10,13 +10,14 @@ cifs-y := trace.o cifsfs.o cifssmb.o cifs_debug.o connect.o dir.o file.o \ ...@@ -10,13 +10,14 @@ cifs-y := trace.o cifsfs.o cifssmb.o cifs_debug.o connect.o dir.o file.o \
cifs_unicode.o nterr.o cifsencrypt.o \ cifs_unicode.o nterr.o cifsencrypt.o \
readdir.o ioctl.o sess.o export.o smb1ops.o unc.o winucase.o \ readdir.o ioctl.o sess.o export.o smb1ops.o unc.o winucase.o \
smb2ops.o smb2maperror.o smb2transport.o \ smb2ops.o smb2maperror.o smb2transport.o \
smb2misc.o smb2pdu.o smb2inode.o smb2file.o cifsacl.o fs_context.o smb2misc.o smb2pdu.o smb2inode.o smb2file.o cifsacl.o fs_context.o \
dns_resolve.o
cifs-$(CONFIG_CIFS_XATTR) += xattr.o cifs-$(CONFIG_CIFS_XATTR) += xattr.o
cifs-$(CONFIG_CIFS_UPCALL) += cifs_spnego.o cifs-$(CONFIG_CIFS_UPCALL) += cifs_spnego.o
cifs-$(CONFIG_CIFS_DFS_UPCALL) += dns_resolve.o cifs_dfs_ref.o dfs_cache.o cifs-$(CONFIG_CIFS_DFS_UPCALL) += cifs_dfs_ref.o dfs_cache.o
cifs-$(CONFIG_CIFS_SWN_UPCALL) += netlink.o cifs_swn.o cifs-$(CONFIG_CIFS_SWN_UPCALL) += netlink.o cifs_swn.o
......
...@@ -87,7 +87,6 @@ static void cifs_prune_tlinks(struct work_struct *work); ...@@ -87,7 +87,6 @@ static void cifs_prune_tlinks(struct work_struct *work);
* *
* This should be called with server->srv_mutex held. * This should be called with server->srv_mutex held.
*/ */
#ifdef CONFIG_CIFS_DFS_UPCALL
static int reconn_set_ipaddr_from_hostname(struct TCP_Server_Info *server) static int reconn_set_ipaddr_from_hostname(struct TCP_Server_Info *server)
{ {
int rc; int rc;
...@@ -124,6 +123,7 @@ static int reconn_set_ipaddr_from_hostname(struct TCP_Server_Info *server) ...@@ -124,6 +123,7 @@ static int reconn_set_ipaddr_from_hostname(struct TCP_Server_Info *server)
return !rc ? -1 : 0; return !rc ? -1 : 0;
} }
#ifdef CONFIG_CIFS_DFS_UPCALL
/* These functions must be called with server->srv_mutex held */ /* These functions must be called with server->srv_mutex held */
static void reconn_set_next_dfs_target(struct TCP_Server_Info *server, static void reconn_set_next_dfs_target(struct TCP_Server_Info *server,
struct cifs_sb_info *cifs_sb, struct cifs_sb_info *cifs_sb,
...@@ -321,14 +321,29 @@ cifs_reconnect(struct TCP_Server_Info *server) ...@@ -321,14 +321,29 @@ cifs_reconnect(struct TCP_Server_Info *server)
#endif #endif
#ifdef CONFIG_CIFS_DFS_UPCALL #ifdef CONFIG_CIFS_DFS_UPCALL
if (cifs_sb && cifs_sb->origin_fullpath)
/* /*
* Set up next DFS target server (if any) for reconnect. If DFS * Set up next DFS target server (if any) for reconnect. If DFS
* feature is disabled, then we will retry last server we * feature is disabled, then we will retry last server we
* connected to before. * connected to before.
*/ */
reconn_set_next_dfs_target(server, cifs_sb, &tgt_list, &tgt_it); reconn_set_next_dfs_target(server, cifs_sb, &tgt_list, &tgt_it);
else {
#endif
/*
* Resolve the hostname again to make sure that IP address is up-to-date.
*/
rc = reconn_set_ipaddr_from_hostname(server);
if (rc) {
cifs_dbg(FYI, "%s: failed to resolve hostname: %d\n",
__func__, rc);
}
#ifdef CONFIG_CIFS_DFS_UPCALL
}
#endif #endif
#ifdef CONFIG_CIFS_SWN_UPCALL #ifdef CONFIG_CIFS_SWN_UPCALL
} }
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment