Retry bind for reserved source ports forever. Add an error message when we have a hard time binding one. Signed-off-by: Ben Myers <bpm@xxxxxxx> --- net/sunrpc/xprtsock.c | 22 ++++++++++++++++++---- 1 files changed, 18 insertions(+), 4 deletions(-) diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c index b6309db..79a001b 100644 --- a/net/sunrpc/xprtsock.c +++ b/net/sunrpc/xprtsock.c @@ -1560,9 +1560,16 @@ static int xs_bind4(struct sock_xprt *transport, struct socket *sock) } last = port; port = xs_next_srcport(transport, sock, port); - if (port > last) + if (port > last) { + if (nloop > 2 && net_ratelimit()) { + printk("RPC: %s %pI4: Cannot bind reserved " + "source port. Consider decreasing " + "min_resvport.\n", + __func__, &myaddr.sin_addr); + } nloop++; - } while (err == -EADDRINUSE && nloop != 2); + } + } while (err == -EADDRINUSE); dprintk("RPC: %s %pI4:%u: %s (%d)\n", __func__, &myaddr.sin_addr, port, err ? "failed" : "ok", err); @@ -1593,9 +1600,16 @@ static int xs_bind6(struct sock_xprt *transport, struct socket *sock) } last = port; port = xs_next_srcport(transport, sock, port); - if (port > last) + if (port > last) { + if (nloop > 2 && net_ratelimit()) { + printk("RPC: %s %pI6: Cannot bind reserved " + "source port. Consider decreasing " + "min_resvport.\n", + __func__, &myaddr.sin6_addr); + } nloop++; - } while (err == -EADDRINUSE && nloop != 2); + } + } while (err == -EADDRINUSE); dprintk("RPC: xs_bind6 %pI6:%u: %s (%d)\n", &myaddr.sin6_addr, port, err ? "failed" : "ok", err); return err; -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html