Re: [PATCH 11/13] cifs: set up recurring workqueue job to do SMB echo requests

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

 



2010/12/10 Jeff Layton <jlayton@xxxxxxxxxx>:
> Signed-off-by: Jeff Layton <jlayton@xxxxxxxxxx>
> ---
>  fs/cifs/cifsglob.h |    1 +
>  fs/cifs/connect.c  |   29 +++++++++++++++++++++++++++++
>  2 files changed, 30 insertions(+), 0 deletions(-)
>
> diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h
> index fb75f04..d924f3c 100644
> --- a/fs/cifs/cifsglob.h
> +++ b/fs/cifs/cifsglob.h
> @@ -221,6 +221,7 @@ struct TCP_Server_Info {
>        bool    sec_kerberosu2u;        /* supports U2U Kerberos */
>        bool    sec_ntlmssp;            /* supports NTLMSSP */
>        bool session_estab; /* mark when very first sess is established */
> +       struct delayed_work     echo; /* echo ping workqueue job */
>  #ifdef CONFIG_CIFS_FSCACHE
>        struct fscache_cookie   *fscache; /* client index cache cookie */
>  #endif
> diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
> index 0feb592..98e1d38 100644
> --- a/fs/cifs/connect.c
> +++ b/fs/cifs/connect.c
> @@ -52,6 +52,9 @@
>  #define CIFS_PORT 445
>  #define RFC1001_PORT 139
>
> +/* SMB echo "timeout" -- FIXME: tunable? */
> +#define SMB_ECHO_INTERVAL (30 * HZ)
> +
>  extern void SMBNTencrypt(unsigned char *passwd, unsigned char *c8,
>                         unsigned char *p24);
>
> @@ -354,6 +357,26 @@ static int coalesce_t2(struct smb_hdr *psecond, struct smb_hdr *pTargetSMB)
>
>  }
>
> +static void
> +cifs_echo_request(struct work_struct *work)
> +{
> +       int rc;
> +       struct TCP_Server_Info *server = container_of(work,
> +                                       struct TCP_Server_Info, echo.work);
> +
> +       /* no need to ping if we got a response recently */
> +       if (time_before(jiffies, server->lstrp + SMB_ECHO_INTERVAL - HZ))
> +               goto requeue_echo;
> +
> +       rc = CIFSSMBEcho(server);
> +       if (rc)
> +               cFYI(1, "Unable to send echo request to server: %s",
> +                       server->hostname);
> +
> +requeue_echo:
> +       queue_delayed_work(system_nrt_wq, &server->echo, SMB_ECHO_INTERVAL);
> +}
> +
>  static int
>  cifs_demultiplex_thread(struct TCP_Server_Info *server)
>  {
> @@ -1610,6 +1633,8 @@ cifs_put_tcp_session(struct TCP_Server_Info *server)
>        list_del_init(&server->tcp_ses_list);
>        spin_unlock(&cifs_tcp_ses_lock);
>
> +       cancel_delayed_work_sync(&server->echo);
> +
>        spin_lock(&GlobalMid_Lock);
>        server->tcpStatus = CifsExiting;
>        spin_unlock(&GlobalMid_Lock);
> @@ -1701,6 +1726,7 @@ cifs_get_tcp_session(struct smb_vol *volume_info)
>        tcp_ses->sequence_number = 0;
>        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);
>
>        /*
>         * at this point we are the only ones with the pointer
> @@ -1750,6 +1776,9 @@ cifs_get_tcp_session(struct smb_vol *volume_info)
>
>        cifs_fscache_get_client_cookie(tcp_ses);
>
> +       /* queue echo request delayed work */
> +       queue_delayed_work(system_nrt_wq, &tcp_ses->echo, SMB_ECHO_INTERVAL);
> +
>        return tcp_ses;
>
>  out_err_crypto_release:
> --
> 1.7.3.2
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>

Reviewed-by: Pavel Shilovsky <piastryyy@xxxxxxxxx>

-- 
Best regards,
Pavel Shilovsky.
--
To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


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

  Powered by Linux