From d77e95cc6d4e947be60757a861c656d8b30d2972 Mon Sep 17 00:00:00 2001 From: Chris Horn Date: Thu, 24 Jun 2021 12:16:46 -0500 Subject: [PATCH] LU-14790 lnet: Reflect ni_fatal in NI status 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 Change-Id: I201bda7e06da1fb1cc23db70ce0cfa3118635d0f Reviewed-on: https://review.whamcloud.com/44072 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Serguei Smirnov Reviewed-by: Cyril Bordage Reviewed-by: Oleg Drokin --- lnet/include/lnet/lib-lnet.h | 14 ++++++++++++++ lnet/lnet/api-ni.c | 14 +++----------- lnet/lnet/router_proc.c | 2 +- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/lnet/include/lnet/lib-lnet.h b/lnet/include/lnet/lib-lnet.h index 234451d..47bae48 100644 --- a/lnet/include/lnet/lib-lnet.h +++ b/lnet/include/lnet/lib-lnet.h @@ -232,6 +232,20 @@ __must_hold(&ni->ni_lock) return update; } +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) { diff --git a/lnet/lnet/api-ni.c b/lnet/lnet/api-ni.c index 2bef416..ae0acd6 100644 --- a/lnet/lnet/api-ni.c +++ b/lnet/lnet/api-ni.c @@ -1910,9 +1910,7 @@ lnet_ping_target_install_locked(struct lnet_ping_buffer *pbuf) 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); @@ -3010,10 +3008,7 @@ lnet_fill_ni_info(struct lnet_ni *ni, struct lnet_ioctl_config_ni *cfg_ni, } 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)); @@ -3096,10 +3091,7 @@ lnet_fill_ni_info_legacy(struct lnet_ni *ni, 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); diff --git a/lnet/lnet/router_proc.c b/lnet/lnet/router_proc.c index 7edc4a8..5d84c73 100644 --- a/lnet/lnet/router_proc.c +++ b/lnet/lnet/router_proc.c @@ -689,7 +689,7 @@ proc_lnet_nis(struct ctl_table *table, int write, void __user *buffer, 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); -- 1.8.3.1