RDS: TCP: start multipath acceptor loop at 0
authorSowmini Varadhan <sowmini.varadhan@oracle.com>
Fri, 4 Nov 2016 17:04:12 +0000 (10:04 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 9 Nov 2016 17:47:49 +0000 (12:47 -0500)
The for() loop in rds_tcp_accept_one() assumes that the 0'th
rds_tcp_conn_path is UP and starts multipath accepts at index 1.
But this assumption may not always be true: if the 0'th path
has failed (ERROR or DOWN state) an incoming connection request
should be used to resurrect this path.

Signed-off-by: Sowmini Varadhan <sowmini.varadhan@oracle.com>
Acked-by: Santosh Shilimkar <santosh.shilimkar@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/rds/tcp_listen.c

index e0b23fb5b8d50328b40475529c39b0e107183cda..c9c496844cd7ad3ac0e240e53ba6c5e1cf3aea7b 100644 (file)
@@ -103,7 +103,7 @@ struct rds_tcp_connection *rds_tcp_accept_one_path(struct rds_connection *conn)
        if (!peer_is_smaller)
                return NULL;
 
-       for (i = 1; i < npaths; i++) {
+       for (i = 0; i < npaths; i++) {
                struct rds_conn_path *cp = &conn->c_path[i];
 
                if (rds_conn_path_transition(cp, RDS_CONN_DOWN,