From patchwork Wed Feb 8 16:17:53 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 9562811 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id BD90E60236 for ; Wed, 8 Feb 2017 16:47:33 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D98DC284FC for ; Wed, 8 Feb 2017 16:47:33 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id CE11528508; Wed, 8 Feb 2017 16:47:33 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.3 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 442F1284FC for ; Wed, 8 Feb 2017 16:47:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753770AbdBHQr0 (ORCPT ); Wed, 8 Feb 2017 11:47:26 -0500 Received: from mail-io0-f194.google.com ([209.85.223.194]:35690 "EHLO mail-io0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752003AbdBHQrZ (ORCPT ); Wed, 8 Feb 2017 11:47:25 -0500 Received: by mail-io0-f194.google.com with SMTP id m98so16377855iod.2 for ; Wed, 08 Feb 2017 08:47:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=HHLuNPKgK5DE84ahg43KH0zCNqbxhgc1NeN7nkGVzRA=; b=PEwdQGTBz/UMrWLICSZ8egdTCdfHAlVLh0TjcuQzCdeRX/ubepQTqto4b3c1iehI5z XyqwVg5Pe8KGzf6Icj+MkhRO+L5FOBGBzSa2V6Krr31y4j31TARO6C9akZ2KOPV0Z23x qn0rj9OJHNWNLLz78S0yX6+yFm3O7hgvWTc2e/K2d401B4LlvWj+B3vtnrP6GllS8605 Qr/X9QIGIYM6X18RW1OGd0JzLiQCbMrOnSq3xx2B2LVDX3g5dKKROTLmh9bnI9liZ4vw RZwb6ySozvZeA3S+MGSY5VAt/TyRVWkTL0uqggqkPGvWqyi6V3/6vwpSZ+jKzC5qujtH Wfkg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=HHLuNPKgK5DE84ahg43KH0zCNqbxhgc1NeN7nkGVzRA=; b=ZGfFm9uaDgI5VqrmjnSugNcsBxhRrNJj+szaf6XSQvIt6I4VajCDEtWwI5yH3rnVOp Fenay6vFmprBsPU3rtJLC+u+ycBdoaZcsjOQco0F24fXl3vdKjwViFLNAPuq8oEyFbmw c400joDhXrxwToiYMTTHE40IjRAroVMYosAnJA+HdFy7bNGWlk/QhvErnSSR1x1mQuBp Fd/jkuVPFrCQ3808XrgSTPyDv1TZbTYEkOEIGSGfoIX4WHqzDDAg1cteTiWsem531A0q yVMaZycKQcY13UuuY/Yk9qA0pePcQNglgnhuaAUFuXsjMdis6vhcZ2F/MzMd/UUZHp3K XHCA== X-Gm-Message-State: AMke39kv7VZ7gqJmThZfshfn4/FY3pziveJIBVVFNWQEePSDpz0Me69jgOEgUH1uzC0SUA== X-Received: by 10.107.162.194 with SMTP id l185mr10671974ioe.184.1486570679756; Wed, 08 Feb 2017 08:17:59 -0800 (PST) Received: from localhost.localdomain (c-68-40-188-1.hsd1.mi.comcast.net. [68.40.188.1]) by smtp.gmail.com with ESMTPSA id k66sm1258622itg.8.2017.02.08.08.17.58 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 08 Feb 2017 08:17:59 -0800 (PST) From: Trond Myklebust To: Anna Schumaker Cc: linux-nfs@vger.kernel.org Subject: [PATCH 2/4] SUNRPC: Refactor TCP socket timeout code into a helper function Date: Wed, 8 Feb 2017 11:17:53 -0500 Message-Id: <20170208161755.3614-3-trond.myklebust@primarydata.com> X-Mailer: git-send-email 2.9.3 In-Reply-To: <20170208161755.3614-2-trond.myklebust@primarydata.com> References: <20170208161755.3614-1-trond.myklebust@primarydata.com> <20170208161755.3614-2-trond.myklebust@primarydata.com> Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Trond Myklebust --- net/sunrpc/xprtsock.c | 45 ++++++++++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c index af392d9b9cec..c8ac649a51cb 100644 --- a/net/sunrpc/xprtsock.c +++ b/net/sunrpc/xprtsock.c @@ -2235,6 +2235,31 @@ static void xs_tcp_shutdown(struct rpc_xprt *xprt) xs_reset_transport(transport); } +static void xs_tcp_set_socket_timeouts(struct rpc_xprt *xprt, + struct socket *sock) +{ + unsigned int keepidle = DIV_ROUND_UP(xprt->timeout->to_initval, HZ); + unsigned int keepcnt = xprt->timeout->to_retries + 1; + unsigned int opt_on = 1; + unsigned int timeo; + + /* TCP Keepalive options */ + kernel_setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, + (char *)&opt_on, sizeof(opt_on)); + kernel_setsockopt(sock, SOL_TCP, TCP_KEEPIDLE, + (char *)&keepidle, sizeof(keepidle)); + kernel_setsockopt(sock, SOL_TCP, TCP_KEEPINTVL, + (char *)&keepidle, sizeof(keepidle)); + kernel_setsockopt(sock, SOL_TCP, TCP_KEEPCNT, + (char *)&keepcnt, sizeof(keepcnt)); + + /* TCP user timeout (see RFC5482) */ + timeo = jiffies_to_msecs(xprt->timeout->to_initval) * + (xprt->timeout->to_retries + 1); + kernel_setsockopt(sock, SOL_TCP, TCP_USER_TIMEOUT, + (char *)&timeo, sizeof(timeo)); +} + static int xs_tcp_finish_connecting(struct rpc_xprt *xprt, struct socket *sock) { struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); @@ -2242,22 +2267,8 @@ static int xs_tcp_finish_connecting(struct rpc_xprt *xprt, struct socket *sock) if (!transport->inet) { struct sock *sk = sock->sk; - unsigned int keepidle = xprt->timeout->to_initval / HZ; - unsigned int keepcnt = xprt->timeout->to_retries + 1; - unsigned int opt_on = 1; - unsigned int timeo; unsigned int addr_pref = IPV6_PREFER_SRC_PUBLIC; - /* TCP Keepalive options */ - kernel_setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, - (char *)&opt_on, sizeof(opt_on)); - kernel_setsockopt(sock, SOL_TCP, TCP_KEEPIDLE, - (char *)&keepidle, sizeof(keepidle)); - kernel_setsockopt(sock, SOL_TCP, TCP_KEEPINTVL, - (char *)&keepidle, sizeof(keepidle)); - kernel_setsockopt(sock, SOL_TCP, TCP_KEEPCNT, - (char *)&keepcnt, sizeof(keepcnt)); - /* Avoid temporary address, they are bad for long-lived * connections such as NFS mounts. * RFC4941, section 3.6 suggests that: @@ -2268,11 +2279,7 @@ static int xs_tcp_finish_connecting(struct rpc_xprt *xprt, struct socket *sock) kernel_setsockopt(sock, SOL_IPV6, IPV6_ADDR_PREFERENCES, (char *)&addr_pref, sizeof(addr_pref)); - /* TCP user timeout (see RFC5482) */ - timeo = jiffies_to_msecs(xprt->timeout->to_initval) * - (xprt->timeout->to_retries + 1); - kernel_setsockopt(sock, SOL_TCP, TCP_USER_TIMEOUT, - (char *)&timeo, sizeof(timeo)); + xs_tcp_set_socket_timeouts(xprt, sock); write_lock_bh(&sk->sk_callback_lock);