diff options
| author | 2017-04-02 19:41:01 -0700 | |
|---|---|---|
| committer | 2017-04-02 19:41:01 -0700 | |
| commit | d4f4b915829bb5b51b42ee909e6ea3302a715550 (patch) | |
| tree | a8e64d94e8f4452c60969b63c6471ffd219d42c0 | |
| parent | sock: correctly test SOCK_TIMESTAMP in sock_recv_ts_and_drops() (diff) | |
| parent | rds: tcp: canonical connection order for all paths with index > 0 (diff) | |
| download | wireguard-linux-d4f4b915829bb5b51b42ee909e6ea3302a715550.tar.xz wireguard-linux-d4f4b915829bb5b51b42ee909e6ea3302a715550.zip | |
Merge branch 'rds-minor-bug-fixes'
Sowmini Varadhan says:
====================
rds: tcp: couple of minor bug fixes
A couple of minor bugfixes that showed up during testing
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to '')
| -rw-r--r-- | net/rds/connection.c | 10 | ||||
| -rw-r--r-- | net/rds/threads.c | 2 |
2 files changed, 10 insertions, 2 deletions
diff --git a/net/rds/connection.c b/net/rds/connection.c index 1fa75ab7b733..6a5ebdea7d2e 100644 --- a/net/rds/connection.c +++ b/net/rds/connection.c @@ -333,11 +333,19 @@ void rds_conn_shutdown(struct rds_conn_path *cp) rds_conn_path_reset(cp); if (!rds_conn_path_transition(cp, RDS_CONN_DISCONNECTING, + RDS_CONN_DOWN) && + !rds_conn_path_transition(cp, RDS_CONN_ERROR, RDS_CONN_DOWN)) { /* This can happen - eg when we're in the middle of tearing * down the connection, and someone unloads the rds module. - * Quite reproduceable with loopback connections. + * Quite reproducible with loopback connections. * Mostly harmless. + * + * Note that this also happens with rds-tcp because + * we could have triggered rds_conn_path_drop in irq + * mode from rds_tcp_state change on the receipt of + * a FIN, thus we need to recheck for RDS_CONN_ERROR + * here. */ rds_conn_path_error(cp, "%s: failed to transition " "to state DOWN, current state " diff --git a/net/rds/threads.c b/net/rds/threads.c index e36e333a0aa0..3e447d056d09 100644 --- a/net/rds/threads.c +++ b/net/rds/threads.c @@ -156,7 +156,7 @@ void rds_connect_worker(struct work_struct *work) struct rds_connection *conn = cp->cp_conn; int ret; - if (cp->cp_index > 1 && cp->cp_conn->c_laddr > cp->cp_conn->c_faddr) + if (cp->cp_index > 0 && cp->cp_conn->c_laddr > cp->cp_conn->c_faddr) return; clear_bit(RDS_RECONNECT_PENDING, &cp->cp_flags); ret = rds_conn_path_transition(cp, RDS_CONN_DOWN, RDS_CONN_CONNECTING); |
