Re: [PATCH] cifs: get rid of dns resolve worker

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Nice

Reviewed-by lsahlber@xxxxxxxxxx

On Tue, 21 Feb 2023 at 05:40, Paulo Alcantara <pc@xxxxxxxxxxxxx> wrote:
>
> 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: Paulo Alcantara (SUSE) <pc@xxxxxxxxxxxxx>
> ---
>  fs/cifs/cifsglob.h |  5 -----
>  fs/cifs/connect.c  | 53 ++++++----------------------------------------
>  fs/cifs/sess.c     |  1 -
>  3 files changed, 6 insertions(+), 53 deletions(-)
>
> diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h
> index 893c2e21eb8e..b1db5dbae31a 100644
> --- a/fs/cifs/cifsglob.h
> +++ b/fs/cifs/cifsglob.h
> @@ -77,10 +77,6 @@
>  #define SMB_ECHO_INTERVAL_MAX 600
>  #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 */
>  #define SMB_INTERFACE_POLL_INTERVAL    600
>
> @@ -689,7 +685,6 @@ struct TCP_Server_Info {
>         /* point to the SMBD connection if RDMA is used instead of socket */
>         struct smbd_connection *smbd_conn;
>         struct delayed_work     echo; /* echo ping workqueue job */
> -       struct delayed_work     resolve; /* dns resolution workqueue job */
>         char    *smallbuf;      /* pointer to current "small" buffer */
>         char    *bigbuf;        /* pointer to current "big" buffer */
>         /* Total size of this PDU. Only valid from cifs_demultiplex_thread */
> diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
> index c65b06855e5f..6831eb8cea7c 100644
> --- a/fs/cifs/connect.c
> +++ b/fs/cifs/connect.c
> @@ -79,8 +79,6 @@ static int reconn_set_ipaddr_from_hostname(struct TCP_Server_Info *server)
>         int len;
>         char *unc;
>         struct sockaddr_storage ss;
> -       time64_t expiry, now;
> -       unsigned long ttl = SMB_DNS_RESOLVE_INTERVAL_DEFAULT;
>
>         if (!server->hostname)
>                 return -EINVAL;
> @@ -102,29 +100,19 @@ static int reconn_set_ipaddr_from_hostname(struct TCP_Server_Info *server)
>         ss = server->dstaddr;
>         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);
>
>         if (rc < 0) {
>                 cifs_dbg(FYI, "%s: failed to resolve server part of %s to IP: %d\n",
>                          __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;
>  }
>
> @@ -148,26 +136,6 @@ static void smb2_query_server_interfaces(struct work_struct *work)
>                            (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.
>   * This is used to signal the cifsd thread to call cifs_reconnect
> @@ -939,7 +907,6 @@ static void clean_demultiplex_info(struct TCP_Server_Info *server)
>         spin_unlock(&server->srv_lock);
>
>         cancel_delayed_work_sync(&server->echo);
> -       cancel_delayed_work_sync(&server->resolve);
>
>         spin_lock(&server->srv_lock);
>         server->tcpStatus = CifsExiting;
> @@ -1563,7 +1530,6 @@ cifs_put_tcp_session(struct TCP_Server_Info *server, int from_reconnect)
>                 cifs_put_tcp_session(server->primary_server, from_reconnect);
>
>         cancel_delayed_work_sync(&server->echo);
> -       cancel_delayed_work_sync(&server->resolve);
>
>         if (from_reconnect)
>                 /*
> @@ -1669,7 +1635,6 @@ cifs_get_tcp_session(struct smb3_fs_context *ctx,
>         INIT_LIST_HEAD(&tcp_ses->tcp_ses_list);
>         INIT_LIST_HEAD(&tcp_ses->smb_ses_list);
>         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);
>         mutex_init(&tcp_ses->reconnect_mutex);
>  #ifdef CONFIG_CIFS_DFS_UPCALL
> @@ -1758,12 +1723,6 @@ cifs_get_tcp_session(struct smb3_fs_context *ctx,
>         /* queue echo request delayed work */
>         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;
>
>  out_err_crypto_release:
> diff --git a/fs/cifs/sess.c b/fs/cifs/sess.c
> index 07822f2a5b7c..13e36ee967a6 100644
> --- a/fs/cifs/sess.c
> +++ b/fs/cifs/sess.c
> @@ -541,7 +541,6 @@ cifs_ses_add_channel(struct cifs_sb_info *cifs_sb, struct cifs_ses *ses,
>                  * remove this channel
>                  */
>                 cancel_delayed_work_sync(&chan->server->echo);
> -               cancel_delayed_work_sync(&chan->server->resolve);
>                 cancel_delayed_work_sync(&chan->server->reconnect);
>
>                 spin_lock(&ses->chan_lock);
> --
> 2.39.2
>



[Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux