staging: lustre: reflect down routes in /proc/sys/lnet/routes
authorChris Horn <hornc@cray.com>
Mon, 15 Feb 2016 15:25:46 +0000 (10:25 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 20 Feb 2016 22:29:23 +0000 (14:29 -0800)
We consider routes "down" if the router is down or the router
NI for the target network is down. This should be reflected
in the output of /proc/sys/lnet/routes

Signed-off-by: Chris Horn <hornc@cray.com>
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-3679
Reviewed-on: http://review.whamcloud.com/7857
Reviewed-by: Cory Spitz <spitzcor@cray.com>
Reviewed-by: Isaac Huang <he.huang@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/lustre/include/linux/lnet/lib-lnet.h
drivers/staging/lustre/lnet/lnet/lib-move.c
drivers/staging/lustre/lnet/lnet/router_proc.c

index b0f80b4c4313910279dc5d4fdebf71444edc1075..b2e50173593128871cbcd1b7e6487caf755f4795 100644 (file)
@@ -64,6 +64,19 @@ extern lnet_t        the_lnet;       /* THE network */
 /** exclusive lock */
 #define LNET_LOCK_EX           CFS_PERCPT_LOCK_EX
 
+static inline int lnet_is_route_alive(lnet_route_t *route)
+{
+       /* gateway is down */
+       if (!route->lr_gateway->lp_alive)
+               return 0;
+       /* no NI status, assume it's alive */
+       if ((route->lr_gateway->lp_ping_feats &
+            LNET_PING_FEAT_NI_STATUS) == 0)
+               return 1;
+       /* has NI status, check # down NIs */
+       return route->lr_downis == 0;
+}
+
 static inline int lnet_is_wire_handle_none(lnet_handle_wire_t *wh)
 {
        return (wh->wh_interface_cookie == LNET_WIRE_HANDLE_COOKIE_NONE &&
index f023b0c4093c426b831dd6df25f48fe3a95f9b45..ab56e7faca3a0a7e787336c500eef08063effc6a 100644 (file)
@@ -1156,9 +1156,7 @@ lnet_find_route_locked(lnet_ni_t *ni, lnet_nid_t target, lnet_nid_t rtr_nid)
        list_for_each_entry(route, &rnet->lrn_routes, lr_list) {
                lp = route->lr_gateway;
 
-               if (!lp->lp_alive || /* gateway is down */
-                   ((lp->lp_ping_feats & LNET_PING_FEAT_NI_STATUS) &&
-                    route->lr_downis)) /* NI to target is down */
+               if (!lnet_is_route_alive(route))
                        continue;
 
                if (ni && lp->lp_ni != ni)
index a7aaf0c7e9a245c24b81d26ab5ffef369f4ea391..4148caf3e39073d8b6a2f6abc878bab97e87bacc 100644 (file)
@@ -242,7 +242,7 @@ static int proc_lnet_routes(struct ctl_table *table, int write,
                        unsigned int hops = route->lr_hops;
                        unsigned int priority = route->lr_priority;
                        lnet_nid_t nid = route->lr_gateway->lp_nid;
-                       int alive = route->lr_gateway->lp_alive;
+                       int alive = lnet_is_route_alive(route);
 
                        s += snprintf(s, tmpstr + tmpsiz - s,
                                      "%-8s %4u %8u %7s %s\n",