[PATCH] xs_bind retry binding forever

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux