Whamcloud - gitweb
LU-14790 lnet: Reflect ni_fatal in NI status 72/44072/2
authorChris Horn <chris.horn@hpe.com>
Thu, 24 Jun 2021 17:16:46 +0000 (12:16 -0500)
committerOleg Drokin <green@whamcloud.com>
Tue, 10 Aug 2021 08:07:47 +0000 (08:07 +0000)
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>
lnet/include/lnet/lib-lnet.h
lnet/lnet/api-ni.c
lnet/lnet/router_proc.c

index 234451d..47bae48 100644 (file)
@@ -232,6 +232,20 @@ __must_hold(&ni->ni_lock)
        return update;
 }
 
        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)
 {
 static inline bool
 lnet_ni_set_status(struct lnet_ni *ni, __u32 status)
 {
index 2bef416..ae0acd6 100644 (file)
@@ -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_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);
 
@@ -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;
        }
 
        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));
@@ -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;
 
        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);
index 7edc4a8..5d84c73 100644 (file)
@@ -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);
 
                        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);