If there's no listener at remote peer, we will
get IB_CM_REJ_INVALID_SERVICE_ID, currently we
will try to resend which makes the discovery longer
than necessary when connecting to a node which is
not up.
Use -EHOSTUNREACH instead of -ECONNREFUSED,
so we don't end up queued for resend.
Lustre-change: https://review.whamcloud.com/42109
Lustre-commit:
65e3e4050ec5bb371c1c343fca49a605286a086e
Change-Id: Ifaf14bc3ada2e2469669285917e366af669817e2
Test-Parameters: trivial
Signed-off-by: Li Dongyang <dongyangli@ddn.com>
Reviewed-by: Serguei Smirnov <ssmirnov@whamcloud.com>
Reviewed-by: Chris Horn <chris.horn@hpe.com>
Reviewed-by: Amir Shehata <ashehata@whamcloud.com>
Reviewed-on: https://review.whamcloud.com/44222
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
kiblnd_rejected(struct kib_conn *conn, int reason, void *priv, int priv_nob)
{
struct kib_peer_ni *peer_ni = conn->ibc_peer;
+ int status = -ECONNREFUSED;
LASSERT (!in_interrupt());
LASSERT (conn->ibc_state == IBLND_CONN_ACTIVE_CONNECT);
break;
case IB_CM_REJ_INVALID_SERVICE_ID:
+ status = -EHOSTUNREACH;
peer_ni->ibp_retries++;
kiblnd_check_reconnect(conn, IBLND_MSG_VERSION, 0,
IBLND_REJECT_INVALID_SRV_ID, NULL);
break;
}
- kiblnd_connreq_done(conn, -ECONNREFUSED);
+ kiblnd_connreq_done(conn, status);
}
static void