SUNRPC: ECONNRESET might require a rebind
authorTrond Myklebust <trond.myklebust@hammerspace.com>
Sun, 17 Sep 2023 13:06:05 +0000 (09:06 -0400)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Sun, 22 Oct 2023 23:47:56 +0000 (19:47 -0400)
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>
net/sunrpc/clnt.c

index 9c210273d06b7f51184c08d38c71929a87eef1c2..f6074a4b9eabf121fdc474a106dd33446eaeeeb0 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: