SUNRPC: ECONNRESET might require a rebind
authorTrond Myklebust <trond.myklebust@hammerspace.com>
Sun, 17 Sep 2023 13:06:05 +0000 (09:06 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 28 Nov 2023 17:19:48 +0000 (17:19 +0000)
[ Upstream commit 4b09ca1508a60be30b2e3940264e93d7aeb5c97e ]

If connect() is returning ECONNRESET, it usually means that nothing is
listening on that port. If so, a rebind might be required in order to
obtain the new port on which the RPC service is listening.

Fixes: fd01b2597941 ("SUNRPC: ECONNREFUSED should cause a rebind.")
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
net/sunrpc/clnt.c

index 9c21027..f6074a4 100644 (file)
@@ -2171,6 +2171,7 @@ call_connect_status(struct rpc_task *task)
        task->tk_status = 0;
        switch (status) {
        case -ECONNREFUSED:
+       case -ECONNRESET:
                /* A positive refusal suggests a rebind is needed. */
                if (RPC_IS_SOFTCONN(task))
                        break;
@@ -2179,7 +2180,6 @@ call_connect_status(struct rpc_task *task)
                        goto out_retry;
                }
                fallthrough;
-       case -ECONNRESET:
        case -ECONNABORTED:
        case -ENETDOWN:
        case -ENETUNREACH: