Re: [PATCH] cifs: set socket send and receive timeouts before attempting connect

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

 



On Thu,  9 Jun 2011 09:53:43 -0400
Jeff Layton <jlayton@xxxxxxxxxx> wrote:

> Benjamin S. reported that he was unable to suspend his machine while
> it had a cifs share mounted. The freezer caused this to spew when he
> tried it:
> 
> -----------------------[snip]------------------
> PM: Syncing filesystems ... done.
> Freezing user space processes ... (elapsed 0.01 seconds) done.
> Freezing remaining freezable tasks ...
> Freezing of tasks failed after 20.01 seconds (1 tasks refusing to freeze, wq_busy=0):
> cifsd         S ffff880127f7b1b0     0  1821      2 0x00800000
>  ffff880127f7b1b0 0000000000000046 ffff88005fe008a8 ffff8800ffffffff
>  ffff880127cee6b0 0000000000011100 ffff880127737fd8 0000000000004000
>  ffff880127737fd8 0000000000011100 ffff880127f7b1b0 ffff880127736010
> Call Trace:
>  [<ffffffff811e85dd>] ? sk_reset_timer+0xf/0x19
>  [<ffffffff8122cf3f>] ? tcp_connect+0x43c/0x445
>  [<ffffffff8123374e>] ? tcp_v4_connect+0x40d/0x47f
>  [<ffffffff8126ce41>] ? schedule_timeout+0x21/0x1ad
>  [<ffffffff8126e358>] ? _raw_spin_lock_bh+0x9/0x1f
>  [<ffffffff811e81c7>] ? release_sock+0x19/0xef
>  [<ffffffff8123e8be>] ? inet_stream_connect+0x14c/0x24a
>  [<ffffffff8104485b>] ? autoremove_wake_function+0x0/0x2a
>  [<ffffffffa02ccfe2>] ? ipv4_connect+0x39c/0x3b5 [cifs]
>  [<ffffffffa02cd7b7>] ? cifs_reconnect+0x1fc/0x28a [cifs]
>  [<ffffffffa02cdbdc>] ? cifs_demultiplex_thread+0x397/0xb9f [cifs]
>  [<ffffffff81076afc>] ? perf_event_exit_task+0xb9/0x1bf
>  [<ffffffffa02cd845>] ? cifs_demultiplex_thread+0x0/0xb9f [cifs]
>  [<ffffffffa02cd845>] ? cifs_demultiplex_thread+0x0/0xb9f [cifs]
>  [<ffffffff810444a1>] ? kthread+0x7a/0x82
>  [<ffffffff81002d14>] ? kernel_thread_helper+0x4/0x10
>  [<ffffffff81044427>] ? kthread+0x0/0x82
>  [<ffffffff81002d10>] ? kernel_thread_helper+0x0/0x10
> 
> Restarting tasks ... done.
> -----------------------[snip]------------------
> 
> We do attempt to perform a try_to_freeze in cifs_reconnect, but the
> connection attempt itself seems to be taking longer than 20s to time
> out. The connect timeout is governed by the socket send and receive
> timeouts, so we can shorten that period by setting those timeouts
> before attempting the connect instead of after.
> 
> Adam Williamson tested the patch and said that it seems to have fixed
> suspending on his laptop when a cifs share is mounted.
> 
> Reported-by: Benjamin S <da_joind@xxxxxxx>
> Tested-by: Adam Williamson <awilliam@xxxxxxxxxx>
> Signed-off-by: Jeff Layton <jlayton@xxxxxxxxxx>
> ---
>  fs/cifs/connect.c |   16 ++++++++--------
>  1 files changed, 8 insertions(+), 8 deletions(-)
> 
> diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
> index 61ed0ba..4ec9630 100644
> --- a/fs/cifs/connect.c
> +++ b/fs/cifs/connect.c
> @@ -2471,14 +2471,6 @@ generic_ip_connect(struct TCP_Server_Info *server)
>  	if (rc < 0)
>  		return rc;
>  
> -	rc = socket->ops->connect(socket, saddr, slen, 0);
> -	if (rc < 0) {
> -		cFYI(1, "Error %d connecting to server", rc);
> -		sock_release(socket);
> -		server->ssocket = NULL;
> -		return rc;
> -	}
> -
>  	/*
>  	 * Eventually check for other socket options to change from
>  	 * the default. sock_setsockopt not used because it expects
> @@ -2507,6 +2499,14 @@ generic_ip_connect(struct TCP_Server_Info *server)
>  		 socket->sk->sk_sndbuf,
>  		 socket->sk->sk_rcvbuf, socket->sk->sk_rcvtimeo);
>  
> +	rc = socket->ops->connect(socket, saddr, slen, 0);
> +	if (rc < 0) {
> +		cFYI(1, "Error %d connecting to server", rc);
> +		sock_release(socket);
> +		server->ssocket = NULL;
> +		return rc;
> +	}
> +
>  	if (sport == htons(RFC1001_PORT))
>  		rc = ip_rfc1001_connect(server);
>  
> -- 
> 1.7.5.2
> 

Doh! I meant to mark this for stable too as I think it's probably
reasonable for that. Steve, would you add "Cc: stable@xxxxxxxxxx" if
you agree?

Thanks,
-- 
Jeff Layton <jlayton@xxxxxxxxxx>
--
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