If the ni_fatal_error_on flag is set on an NI then that NI should be
considered down.
HPE-bug-id: LUS-10167
Test-Parameters: trivial testlist=sanity-lnet
Signed-off-by: Chris Horn <chris.horn@hpe.com>
Change-Id: I201bda7e06da1fb1cc23db70ce0cfa3118635d0f
Reviewed-on: https://review.whamcloud.com/44072
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Serguei Smirnov <ssmirnov@whamcloud.com>
Reviewed-by: Cyril Bordage <cbordage@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
+static inline unsigned int
+lnet_ni_get_status_locked(struct lnet_ni *ni)
+__must_hold(&ni->ni_lock)
+{
+ if (ni->ni_nid == LNET_NID_LO_0)
+ return LNET_NI_STATUS_UP;
+ else if (atomic_read(&ni->ni_fatal_error_on))
+ return LNET_NI_STATUS_DOWN;
+ else if (ni->ni_status)
+ return ni->ni_status->ns_status;
+ else
+ return LNET_NI_STATUS_UP;
+}
+
static inline bool
lnet_ni_set_status(struct lnet_ni *ni, __u32 status)
{
static inline bool
lnet_ni_set_status(struct lnet_ni *ni, __u32 status)
{
ns->ns_nid = ni->ni_nid;
lnet_ni_lock(ni);
ns->ns_nid = ni->ni_nid;
lnet_ni_lock(ni);
- ns->ns_status = (ni->ni_status != NULL) ?
- ni->ni_status->ns_status :
- LNET_NI_STATUS_UP;
+ ns->ns_status = lnet_ni_get_status_locked(ni);
ni->ni_status = ns;
lnet_ni_unlock(ni);
ni->ni_status = ns;
lnet_ni_unlock(ni);
}
cfg_ni->lic_nid = ni->ni_nid;
}
cfg_ni->lic_nid = ni->ni_nid;
- if (ni->ni_nid == LNET_NID_LO_0)
- cfg_ni->lic_status = LNET_NI_STATUS_UP;
- else
- cfg_ni->lic_status = ni->ni_status->ns_status;
+ cfg_ni->lic_status = lnet_ni_get_status_locked(ni);
cfg_ni->lic_dev_cpt = ni->ni_dev_cpt;
memcpy(&tun->lt_cmn, &ni->ni_net->net_tunables, sizeof(tun->lt_cmn));
cfg_ni->lic_dev_cpt = ni->ni_dev_cpt;
memcpy(&tun->lt_cmn, &ni->ni_net->net_tunables, sizeof(tun->lt_cmn));
config->cfg_config_u.cfg_net.net_peer_rtr_credits =
ni->ni_net->net_tunables.lct_peer_rtr_credits;
config->cfg_config_u.cfg_net.net_peer_rtr_credits =
ni->ni_net->net_tunables.lct_peer_rtr_credits;
- if (ni->ni_nid == LNET_NID_LO_0)
- net_config->ni_status = LNET_NI_STATUS_UP;
- else
- net_config->ni_status = ni->ni_status->ns_status;
+ net_config->ni_status = lnet_ni_get_status_locked(ni);
if (ni->ni_cpts) {
int num_cpts = min(ni->ni_ncpts, LNET_MAX_SHOW_NUM_CPT);
if (ni->ni_cpts) {
int num_cpts = min(ni->ni_ncpts, LNET_MAX_SHOW_NUM_CPT);
lnet_ni_lock(ni);
LASSERT(ni->ni_status != NULL);
lnet_ni_lock(ni);
LASSERT(ni->ni_status != NULL);
- stat = (ni->ni_status->ns_status ==
+ stat = (lnet_ni_get_status_locked(ni) ==
LNET_NI_STATUS_UP) ? "up" : "down";
lnet_ni_unlock(ni);
LNET_NI_STATUS_UP) ? "up" : "down";
lnet_ni_unlock(ni);