__u32 lpni_gw_seq;
/* returned RC ping features. Protected with lpni_lock */
unsigned int lpni_ping_feats;
+ /* time last message was received from the peer */
+ time64_t lpni_last_alive;
/* preferred local nids: if only one, use lpni_pref.nid */
union lpni_pref {
lnet_nid_t nid;
/* primary NID of the peer */
lnet_nid_t lp_primary_nid;
+ /* net to perform discovery on */
+ __u32 lp_disc_net_id;
+
/* CPT of peer_table */
int lp_cpt;
/* number of NIDs on this peer */
int lp_nnis;
- /* # refs from lnet_route_t::lr_gateway */
+ /* # refs from lnet_route::lr_gateway */
int lp_rtr_refcount;
/*
/* routes on this peer */
struct list_head lp_routes;
- /* time of last router check attempt */
- time64_t lp_rtrcheck_timestamp;
-
/* reference count */
atomic_t lp_refcount;
/* Net ID */
__u32 lpn_net_id;
+ /* time of last router net check attempt */
+ time64_t lpn_rtrcheck_timestamp;
+
+ /* selection sequence number */
+ __u32 lpn_seq;
+
/* reference count */
atomic_t lpn_refcount;
};
int lr_seq; /* sequence for round-robin */
__u32 lr_hops; /* how far I am */
unsigned int lr_priority; /* route priority */
+ bool lr_alive; /* cached route aliveness */
};
#define LNET_REMOTE_NETS_HASH_DEFAULT (1U << 7)
int msc_nfinalizers;
/* msgs waiting to complete finalizing */
struct list_head msc_finalizing;
+ /* msgs waiting to be resent */
+ struct list_head msc_resending;
struct list_head msc_active; /* active message list */
/* threads doing finalization */
void **msc_finalizers;
+ /* threads doing resends */
+ void **msc_resenders;
};
/* Peer Discovery states */
bool ln_nis_from_mod_params;
/*
- * waitq for the monitor thread. The monitor thread takes care of
+ * completion for the monitor thread. The monitor thread takes care of
* checking routes, timedout messages and resending messages.
*/
- wait_queue_head_t ln_mt_waitq;
+ struct completion ln_mt_wait_complete;
/* per-cpt resend queues */
struct list_head **ln_mt_resendqs;
* based on the mdh cookie.
*/
struct list_head **ln_mt_rstq;
+ /*
+ * A response tracker becomes a zombie when the associated MD is queued
+ * for unlink before the response tracker is detached from the MD. An
+ * entry on a zombie list can be freed when either the remaining
+ * operations on the MD complete or when LNet has shut down.
+ */
+ struct list_head **ln_mt_zombie_rstqs;
/* recovery eq handler */
struct lnet_handle_eq ln_mt_eqh;
+ /*
+ * Completed when the discovery and monitor threads can enter their
+ * work loops
+ */
+ struct completion ln_started;
};
#endif