Whamcloud - gitweb
LU-11299 lnet: Cleanup rcd
[fs/lustre-release.git] / lnet / include / lnet / lib-lnet.h
index a829103..6f6b146 100644 (file)
@@ -92,16 +92,8 @@ extern struct lnet the_lnet;                 /* THE network */
                kernel_getsockname(sock, addr, addrlen)
 #endif
 
-static inline int lnet_is_route_alive(struct lnet_route *route)
-{
-       if (!route->lr_gateway->lpni_alive)
-               return 0; /* gateway is down */
-       if ((route->lr_gateway->lpni_ping_feats &
-            LNET_PING_FEAT_NI_STATUS) == 0)
-               return 1; /* no NI status, assume it's alive */
-       /* has NI status, check # down NIs */
-       return route->lr_downis == 0;
-}
+bool lnet_is_route_alive(struct lnet_route *route);
+bool lnet_is_gateway_alive(struct lnet_peer *gw);
 
 static inline int lnet_is_wire_handle_none(struct lnet_handle_wire *wh)
 {
@@ -448,9 +440,9 @@ lnet_peer_ni_decref_locked(struct lnet_peer_ni *lp)
 }
 
 static inline int
-lnet_isrouter(struct lnet_peer_ni *lp)
+lnet_isrouter(struct lnet_peer_ni *lpni)
 {
-       return lp->lpni_rtr_refcount != 0;
+       return lpni->lpni_peer_net->lpn_peer->lp_rtr_refcount != 0;
 }
 
 static inline void
@@ -574,15 +566,17 @@ extern unsigned int lnet_health_sensitivity;
 extern unsigned int lnet_recovery_interval;
 extern unsigned int lnet_peer_discovery_disabled;
 extern unsigned int lnet_drop_asym_route;
+extern unsigned int router_sensitivity_percentage;
 extern int portal_rotor;
 
+void lnet_mt_event_handler(struct lnet_event *event);
+
 int lnet_notify(struct lnet_ni *ni, lnet_nid_t peer, int alive,
                time64_t when);
 void lnet_notify_locked(struct lnet_peer_ni *lp, int notifylnd, int alive,
                        time64_t when);
 int lnet_add_route(__u32 net, __u32 hops, lnet_nid_t gateway_nid,
                   unsigned int priority);
-int lnet_check_routes(void);
 int lnet_del_route(__u32 net, lnet_nid_t gw_nid);
 void lnet_destroy_routes(void);
 int lnet_get_route(int idx, __u32 *net, __u32 *hops,
@@ -863,11 +857,7 @@ void lnet_monitor_thr_stop(void);
 
 bool lnet_router_checker_active(void);
 void lnet_check_routers(void);
-int lnet_router_pre_mt_start(void);
 void lnet_router_post_mt_start(void);
-void lnet_prune_rc_data(int wait_unlink);
-void lnet_router_cleanup(void);
-void lnet_router_ni_update_locked(struct lnet_peer_ni *gw, __u32 net);
 void lnet_swap_pinginfo(struct lnet_ping_buffer *pbuf);
 
 int lnet_ping_info_validate(struct lnet_ping_info *pinfo);
@@ -954,15 +944,6 @@ lnet_find_peer_net_locked(struct lnet_peer *peer, __u32 net_id)
        return NULL;
 }
 
-static inline void
-lnet_peer_set_alive(struct lnet_peer_ni *lp)
-{
-       lp->lpni_last_alive = ktime_get_seconds();
-       lp->lpni_last_query = lp->lpni_last_alive;
-       if (!lp->lpni_alive)
-               lnet_notify_locked(lp, 0, 1, lp->lpni_last_alive);
-}
-
 static inline bool
 lnet_peer_is_multi_rail(struct lnet_peer *lp)
 {
@@ -1001,6 +982,22 @@ lnet_peer_needs_push(struct lnet_peer *lp)
        return false;
 }
 
+/*
+ * A peer is alive if it satisfies the following two conditions:
+ *  1. peer health >= LNET_MAX_HEALTH_VALUE * router_sensitivity_percentage
+ *  2. the cached NI status received when we discover the peer is UP
+ */
+static inline bool
+lnet_is_peer_ni_alive(struct lnet_peer_ni *lpni)
+{
+       bool halive = false;
+
+       halive = (atomic_read(&lpni->lpni_healthv) >=
+                (LNET_MAX_HEALTH_VALUE * router_sensitivity_percentage / 100));
+
+       return halive && lpni->lpni_ns_status == LNET_NI_STATUS_UP;
+}
+
 static inline void
 lnet_inc_healthv(atomic_t *healthv)
 {