Commit 0e9bd27b authored by Paulo Alcantara's avatar Paulo Alcantara Committed by Steve French

cifs: get rid of dns resolve worker

We already upcall to resolve hostnames during reconnect by calling
reconn_set_ipaddr_from_hostname(), so there is no point in having a
worker to periodically call it.
Signed-off-by: default avatarPaulo Alcantara (SUSE) <pc@manguebit.com>
Reviewed-by <lsahlber@redhat.com>
Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
parent 3e161c27
...@@ -77,10 +77,6 @@ ...@@ -77,10 +77,6 @@
#define SMB_ECHO_INTERVAL_MAX 600 #define SMB_ECHO_INTERVAL_MAX 600
#define SMB_ECHO_INTERVAL_DEFAULT 60 #define SMB_ECHO_INTERVAL_DEFAULT 60
/* dns resolution intervals in seconds */
#define SMB_DNS_RESOLVE_INTERVAL_MIN 120
#define SMB_DNS_RESOLVE_INTERVAL_DEFAULT 600
/* smb multichannel query server interfaces interval in seconds */ /* smb multichannel query server interfaces interval in seconds */
#define SMB_INTERFACE_POLL_INTERVAL 600 #define SMB_INTERFACE_POLL_INTERVAL 600
...@@ -691,7 +687,6 @@ struct TCP_Server_Info { ...@@ -691,7 +687,6 @@ struct TCP_Server_Info {
/* point to the SMBD connection if RDMA is used instead of socket */ /* point to the SMBD connection if RDMA is used instead of socket */
struct smbd_connection *smbd_conn; struct smbd_connection *smbd_conn;
struct delayed_work echo; /* echo ping workqueue job */ struct delayed_work echo; /* echo ping workqueue job */
struct delayed_work resolve; /* dns resolution workqueue job */
char *smallbuf; /* pointer to current "small" buffer */ char *smallbuf; /* pointer to current "small" buffer */
char *bigbuf; /* pointer to current "big" buffer */ char *bigbuf; /* pointer to current "big" buffer */
/* Total size of this PDU. Only valid from cifs_demultiplex_thread */ /* Total size of this PDU. Only valid from cifs_demultiplex_thread */
......
...@@ -79,8 +79,6 @@ static int reconn_set_ipaddr_from_hostname(struct TCP_Server_Info *server) ...@@ -79,8 +79,6 @@ static int reconn_set_ipaddr_from_hostname(struct TCP_Server_Info *server)
int len; int len;
char *unc; char *unc;
struct sockaddr_storage ss; struct sockaddr_storage ss;
time64_t expiry, now;
unsigned long ttl = SMB_DNS_RESOLVE_INTERVAL_DEFAULT;
if (!server->hostname) if (!server->hostname)
return -EINVAL; return -EINVAL;
...@@ -102,29 +100,19 @@ static int reconn_set_ipaddr_from_hostname(struct TCP_Server_Info *server) ...@@ -102,29 +100,19 @@ static int reconn_set_ipaddr_from_hostname(struct TCP_Server_Info *server)
ss = server->dstaddr; ss = server->dstaddr;
spin_unlock(&server->srv_lock); spin_unlock(&server->srv_lock);
rc = dns_resolve_server_name_to_ip(unc, (struct sockaddr *)&ss, &expiry); rc = dns_resolve_server_name_to_ip(unc, (struct sockaddr *)&ss, NULL);
kfree(unc); kfree(unc);
if (rc < 0) { if (rc < 0) {
cifs_dbg(FYI, "%s: failed to resolve server part of %s to IP: %d\n", cifs_dbg(FYI, "%s: failed to resolve server part of %s to IP: %d\n",
__func__, server->hostname, rc); __func__, server->hostname, rc);
goto requeue_resolve; } else {
spin_lock(&server->srv_lock);
memcpy(&server->dstaddr, &ss, sizeof(server->dstaddr));
spin_unlock(&server->srv_lock);
rc = 0;
} }
spin_lock(&server->srv_lock);
memcpy(&server->dstaddr, &ss, sizeof(server->dstaddr));
spin_unlock(&server->srv_lock);
now = ktime_get_real_seconds();
if (expiry && expiry > now)
/* To make sure we don't use the cached entry, retry 1s */
ttl = max_t(unsigned long, expiry - now, SMB_DNS_RESOLVE_INTERVAL_MIN) + 1;
requeue_resolve:
cifs_dbg(FYI, "%s: next dns resolution scheduled for %lu seconds in the future\n",
__func__, ttl);
mod_delayed_work(cifsiod_wq, &server->resolve, (ttl * HZ));
return rc; return rc;
} }
...@@ -148,26 +136,6 @@ static void smb2_query_server_interfaces(struct work_struct *work) ...@@ -148,26 +136,6 @@ static void smb2_query_server_interfaces(struct work_struct *work)
(SMB_INTERFACE_POLL_INTERVAL * HZ)); (SMB_INTERFACE_POLL_INTERVAL * HZ));
} }
static void cifs_resolve_server(struct work_struct *work)
{
int rc;
struct TCP_Server_Info *server = container_of(work,
struct TCP_Server_Info, resolve.work);
cifs_server_lock(server);
/*
* 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);
}
cifs_server_unlock(server);
}
/* /*
* Update the tcpStatus for the server. * Update the tcpStatus for the server.
* This is used to signal the cifsd thread to call cifs_reconnect * This is used to signal the cifsd thread to call cifs_reconnect
...@@ -925,7 +893,6 @@ static void clean_demultiplex_info(struct TCP_Server_Info *server) ...@@ -925,7 +893,6 @@ static void clean_demultiplex_info(struct TCP_Server_Info *server)
spin_unlock(&server->srv_lock); spin_unlock(&server->srv_lock);
cancel_delayed_work_sync(&server->echo); cancel_delayed_work_sync(&server->echo);
cancel_delayed_work_sync(&server->resolve);
spin_lock(&server->srv_lock); spin_lock(&server->srv_lock);
server->tcpStatus = CifsExiting; server->tcpStatus = CifsExiting;
...@@ -1549,7 +1516,6 @@ cifs_put_tcp_session(struct TCP_Server_Info *server, int from_reconnect) ...@@ -1549,7 +1516,6 @@ cifs_put_tcp_session(struct TCP_Server_Info *server, int from_reconnect)
cifs_put_tcp_session(server->primary_server, from_reconnect); cifs_put_tcp_session(server->primary_server, from_reconnect);
cancel_delayed_work_sync(&server->echo); cancel_delayed_work_sync(&server->echo);
cancel_delayed_work_sync(&server->resolve);
if (from_reconnect) if (from_reconnect)
/* /*
...@@ -1655,7 +1621,6 @@ cifs_get_tcp_session(struct smb3_fs_context *ctx, ...@@ -1655,7 +1621,6 @@ cifs_get_tcp_session(struct smb3_fs_context *ctx,
INIT_LIST_HEAD(&tcp_ses->tcp_ses_list); INIT_LIST_HEAD(&tcp_ses->tcp_ses_list);
INIT_LIST_HEAD(&tcp_ses->smb_ses_list); INIT_LIST_HEAD(&tcp_ses->smb_ses_list);
INIT_DELAYED_WORK(&tcp_ses->echo, cifs_echo_request); INIT_DELAYED_WORK(&tcp_ses->echo, cifs_echo_request);
INIT_DELAYED_WORK(&tcp_ses->resolve, cifs_resolve_server);
INIT_DELAYED_WORK(&tcp_ses->reconnect, smb2_reconnect_server); INIT_DELAYED_WORK(&tcp_ses->reconnect, smb2_reconnect_server);
mutex_init(&tcp_ses->reconnect_mutex); mutex_init(&tcp_ses->reconnect_mutex);
#ifdef CONFIG_CIFS_DFS_UPCALL #ifdef CONFIG_CIFS_DFS_UPCALL
...@@ -1744,12 +1709,6 @@ cifs_get_tcp_session(struct smb3_fs_context *ctx, ...@@ -1744,12 +1709,6 @@ cifs_get_tcp_session(struct smb3_fs_context *ctx,
/* queue echo request delayed work */ /* queue echo request delayed work */
queue_delayed_work(cifsiod_wq, &tcp_ses->echo, tcp_ses->echo_interval); queue_delayed_work(cifsiod_wq, &tcp_ses->echo, tcp_ses->echo_interval);
/* queue dns resolution delayed work */
cifs_dbg(FYI, "%s: next dns resolution scheduled for %d seconds in the future\n",
__func__, SMB_DNS_RESOLVE_INTERVAL_DEFAULT);
queue_delayed_work(cifsiod_wq, &tcp_ses->resolve, (SMB_DNS_RESOLVE_INTERVAL_DEFAULT * HZ));
return tcp_ses; return tcp_ses;
out_err_crypto_release: out_err_crypto_release:
......
...@@ -480,7 +480,6 @@ cifs_ses_add_channel(struct cifs_sb_info *cifs_sb, struct cifs_ses *ses, ...@@ -480,7 +480,6 @@ cifs_ses_add_channel(struct cifs_sb_info *cifs_sb, struct cifs_ses *ses,
* remove this channel * remove this channel
*/ */
cancel_delayed_work_sync(&chan->server->echo); cancel_delayed_work_sync(&chan->server->echo);
cancel_delayed_work_sync(&chan->server->resolve);
cancel_delayed_work_sync(&chan->server->reconnect); cancel_delayed_work_sync(&chan->server->reconnect);
spin_lock(&ses->chan_lock); spin_lock(&ses->chan_lock);
......
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