From patchwork Mon Feb 9 03:07:33 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 5798071 Return-Path: X-Original-To: patchwork-linux-nfs@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id B68919F3CD for ; Mon, 9 Feb 2015 03:07:51 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id DBA5A20220 for ; Mon, 9 Feb 2015 03:07:50 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 0985B20211 for ; Mon, 9 Feb 2015 03:07:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759149AbbBIDHt (ORCPT ); Sun, 8 Feb 2015 22:07:49 -0500 Received: from mail-ie0-f178.google.com ([209.85.223.178]:37199 "EHLO mail-ie0-f178.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1759245AbbBIDHs (ORCPT ); Sun, 8 Feb 2015 22:07:48 -0500 Received: by iebtr6 with SMTP id tr6so13506488ieb.4 for ; Sun, 08 Feb 2015 19:07:47 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=iU0mjw8JKCKJ8W00eeiMhRpCZAzu/Xg3bwDLOuRvqAg=; b=T+6kBKKKaLcnOrSd0lGhgK79WMw5zw4Jab2M9MDHM3uUTPyLXt9RHz2V9OT4YHZmG8 MQA+Gj1ENEngfefhWlTF7uSrBdMUYxNZwCmkSl+nZwNdrzGR/LyKJpG25hl8iHYBGJW5 gUyNVEE55hySr12QFki3PL+4AY/ZxpIOpFGZQBJ9DEWl+XgN85PoALk1g5YYzYIxkwVu NK9aJxmffvhbFjmxYKp1RvxIdh5uOD26+e0NntVQxPxqSfsJbKgkmBs67Smqf3aYcAYn KCuCsqvDQgDdFDGXGtMGh3kSMO/lkhAZlSv39x/kPsoWB4UXYr12U4ls58HY4qZGgfzY w0gw== X-Gm-Message-State: ALoCoQlZTne6BrXI9TgiB4OFddGfJP2K0KYkG1mno3BWUUloiMhaYwXO7EYeQ16XdWYtkrT9EZad X-Received: by 10.50.137.99 with SMTP id qh3mr14679208igb.7.1423451267578; Sun, 08 Feb 2015 19:07:47 -0800 (PST) Received: from leira.trondhjem.org.localdomain (c-68-40-185-14.hsd1.mi.comcast.net. [68.40.185.14]) by mx.google.com with ESMTPSA id w9sm1142240igl.0.2015.02.08.19.07.46 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 08 Feb 2015 19:07:47 -0800 (PST) From: Trond Myklebust To: linux-nfs@vger.kernel.org Subject: [PATCH 02/11] SUNRPC: Handle EADDRINUSE on connect Date: Sun, 8 Feb 2015 22:07:33 -0500 Message-Id: <1423451262-84493-3-git-send-email-trond.myklebust@primarydata.com> X-Mailer: git-send-email 2.1.0 In-Reply-To: <1423451262-84493-2-git-send-email-trond.myklebust@primarydata.com> References: <1423451262-84493-1-git-send-email-trond.myklebust@primarydata.com> <1423451262-84493-2-git-send-email-trond.myklebust@primarydata.com> Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Now that we're setting SO_REUSEPORT, we still need to handle the case where a connect() is attempted, but the old socket is still lingering. Essentially, all we want to do here is handle the error by waiting a few seconds and then retrying. Signed-off-by: Trond Myklebust --- net/sunrpc/clnt.c | 3 +++ net/sunrpc/xprtsock.c | 2 ++ 2 files changed, 5 insertions(+) diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c index 3f5d4d48f0cb..612aa73bbc60 100644 --- a/net/sunrpc/clnt.c +++ b/net/sunrpc/clnt.c @@ -1826,6 +1826,7 @@ call_connect_status(struct rpc_task *task) case -ECONNABORTED: case -ENETUNREACH: case -EHOSTUNREACH: + case -EADDRINUSE: case -ENOBUFS: case -EPIPE: if (RPC_IS_SOFTCONN(task)) @@ -1934,6 +1935,7 @@ call_transmit_status(struct rpc_task *task) } case -ECONNRESET: case -ECONNABORTED: + case -EADDRINUSE: case -ENOTCONN: case -ENOBUFS: case -EPIPE: @@ -2053,6 +2055,7 @@ call_status(struct rpc_task *task) case -ECONNRESET: case -ECONNABORTED: rpc_force_rebind(clnt); + case -EADDRINUSE: case -ENOBUFS: rpc_delay(task, 3*HZ); case -EPIPE: diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c index 484c5040436a..20f25a837e06 100644 --- a/net/sunrpc/xprtsock.c +++ b/net/sunrpc/xprtsock.c @@ -721,6 +721,7 @@ static int xs_tcp_send_request(struct rpc_task *task) xs_tcp_shutdown(xprt); case -ECONNREFUSED: case -ENOTCONN: + case -EADDRINUSE: case -EPIPE: clear_bit(SOCK_ASYNC_NOSPACE, &transport->sock->flags); } @@ -2299,6 +2300,7 @@ static void xs_tcp_setup_socket(struct work_struct *work) case -ECONNREFUSED: case -ECONNRESET: case -ENETUNREACH: + case -EADDRINUSE: case -ENOBUFS: /* retry with existing socket, after a delay */ goto out;