Whamcloud - gitweb
LU-13265 lnet: Modify push MD to have single threshold
[fs/lustre-release.git] / lnet / include / lnet / lib-lnet.h
index 45e5b6d..602bf46 100644 (file)
@@ -841,6 +841,8 @@ static inline int lnet_push_target_resize_needed(void)
 }
 
 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);
@@ -967,9 +969,37 @@ lnet_is_peer_ni_alive(struct lnet_peer_ni *lpni)
 }
 
 static inline void
-lnet_set_healthv(atomic_t *healthv, int value)
+lnet_update_peer_net_healthv(struct lnet_peer_ni *lpni)
 {
-       atomic_set(healthv, value);
+       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)
+{
+       /* 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