X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lnet%2Finclude%2Flnet%2Flib-lnet.h;h=6f6b14692d16251ad4e660c8fadb6fb425ff994d;hb=9ee453928ab854f43016624578b95c76e73a6a47;hp=26c0e44de3acb74a437f35977749cdbc9b75fff4;hpb=53f7b8b7a22877eb8154a5c529e1fd9f6fb3167a;p=fs%2Flustre-release.git diff --git a/lnet/include/lnet/lib-lnet.h b/lnet/include/lnet/lib-lnet.h index 26c0e44..6f6b146 100644 --- a/lnet/include/lnet/lib-lnet.h +++ b/lnet/include/lnet/lib-lnet.h @@ -92,15 +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) -{ - /* TODO re-implement gateway alive indication */ - CDEBUG(D_NET, "TODO: reimplement routing. gateway = %s\n", - route->lr_gateway ? - libcfs_nid2str(route->lr_gateway->lp_primary_nid) : - "undefined"); - return 1; -} +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) { @@ -573,6 +566,7 @@ 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); @@ -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) {