}
}
-static inline struct lnet_me *
-lnet_me_alloc (void)
-{
- struct lnet_me *me;
-
- me = kmem_cache_alloc(lnet_mes_cachep, GFP_NOFS | __GFP_ZERO);
-
- if (me)
- CDEBUG(D_MALLOC, "slab-alloced 'me' at %p.\n", me);
- else
- CDEBUG(D_MALLOC, "failed to allocate 'me'\n");
-
- return me;
-}
-
-static inline void
-lnet_me_free(struct lnet_me *me)
-{
- CDEBUG(D_MALLOC, "slab-freed 'me' at %p.\n", me);
- kmem_cache_free(lnet_mes_cachep, me);
-}
-
struct lnet_libhandle *lnet_res_lh_lookup(struct lnet_res_container *rec,
__u64 cookie);
void lnet_res_lh_initialize(struct lnet_res_container *rec,
}
int lnet_push_target_resize(void);
+int lnet_push_target_post(struct lnet_ping_buffer *pbuf,
+ struct lnet_handle_md *mdh);
void lnet_peer_push_event(struct lnet_event *ev);
int lnet_parse_ip2nets(char **networksp, char *ip2nets);
}
static inline void
-lnet_set_healthv(atomic_t *healthv, int value)
+lnet_update_peer_net_healthv(struct lnet_peer_ni *lpni)
+{
+ struct lnet_peer_net *lpn;
+ int best_healthv = 0;
+
+ lpn = lpni->lpni_peer_net;
+
+ list_for_each_entry(lpni, &lpn->lpn_peer_nis, lpni_peer_nis) {
+ int lpni_healthv = atomic_read(&lpni->lpni_healthv);
+ if (best_healthv < lpni_healthv)
+ best_healthv = lpni_healthv;
+ }
+
+ lpn->lpn_healthv = best_healthv;
+}
+
+static inline void
+lnet_set_lpni_healthv_locked(struct lnet_peer_ni *lpni, int value)
+{
+ if (atomic_read(&lpni->lpni_healthv) == value)
+ return;
+ atomic_set(&lpni->lpni_healthv, value);
+ lnet_update_peer_net_healthv(lpni);
+}
+
+static inline void
+lnet_inc_lpni_healthv_locked(struct lnet_peer_ni *lpni)
{
- atomic_set(healthv, value);
+ /* only adjust the net health if the lpni health value changed */
+ if (atomic_add_unless(&lpni->lpni_healthv, 1, LNET_MAX_HEALTH_VALUE))
+ lnet_update_peer_net_healthv(lpni);
}
static inline void