Whamcloud - gitweb
LU-12200 lnet: check peer timeout on a router
[fs/lustre-release.git] / lnet / include / lnet / lib-types.h
index 0ab2d27..0550090 100644 (file)
@@ -297,8 +297,8 @@ struct lnet_lnd {
        int (*lnd_eager_recv)(struct lnet_ni *ni, void *private,
                              struct lnet_msg *msg, void **new_privatep);
 
-       /* notification of peer health */
-       void (*lnd_notify)(struct lnet_ni *ni, lnet_nid_t peer, int alive);
+       /* notification of peer down */
+       void (*lnd_notify_peer_down)(lnet_nid_t peer);
 
        /* query of peer aliveness */
        void (*lnd_query)(struct lnet_ni *ni, lnet_nid_t peer, time64_t *when);
@@ -415,6 +415,12 @@ struct lnet_net {
 
        /* network state */
        enum lnet_net_state     net_state;
+
+       /* when I was last alive */
+       time64_t                net_last_alive;
+
+       /* protects access to net_last_alive */
+       spinlock_t              net_lock;
 };
 
 struct lnet_ni {
@@ -450,9 +456,6 @@ struct lnet_ni {
        /* percpt reference count */
        int                     **ni_refs;
 
-       /* when I was last alive */
-       time64_t                ni_last_alive;
-
        /* pointer to parent network */
        struct lnet_net         *ni_net;
 
@@ -527,16 +530,6 @@ struct lnet_ping_buffer {
 #define LNET_PING_INFO_TO_BUFFER(PINFO)        \
        container_of((PINFO), struct lnet_ping_buffer, pb_info)
 
-/* router checker data, per router */
-struct lnet_rc_data {
-       /* chain on the_lnet.ln_zombie_rcd or ln_deathrow_rcd */
-       struct list_head        rcd_list;
-       struct lnet_handle_md   rcd_mdh;        /* ping buffer MD */
-       struct lnet_peer_ni     *rcd_gateway;   /* reference to gateway */
-       struct lnet_ping_buffer *rcd_pingbuffer;/* ping buffer */
-       int                     rcd_nnis;       /* desired size of buffer */
-};
-
 struct lnet_peer_ni {
        /* chain on lpn_peer_nis */
        struct list_head        lpni_peer_nis;
@@ -569,20 +562,6 @@ struct lnet_peer_ni {
        int                     lpni_minrtrcredits;
        /* bytes queued for sending */
        long                    lpni_txqnob;
-       /* notification outstanding? */
-       bool                    lpni_notify;
-       /* outstanding notification for LND? */
-       bool                    lpni_notifylnd;
-       /* some thread is handling notification */
-       bool                    lpni_notifying;
-       /* # times router went dead<->alive. Protected with lpni_lock */
-       int                     lpni_alive_count;
-       /* time of last aliveness news */
-       time64_t                lpni_timestamp;
-       /* when I was last alive */
-       time64_t                lpni_last_alive;
-       /* when lpni_ni was queried last time */
-       time64_t                lpni_last_query;
        /* network peer is on */
        struct lnet_net         *lpni_net;
        /* peer's NID */
@@ -605,6 +584,8 @@ struct lnet_peer_ni {
        __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;
@@ -612,8 +593,6 @@ struct lnet_peer_ni {
        } lpni_pref;
        /* number of preferred NIDs in lnpi_pref_nids */
        __u32                   lpni_pref_nnids;
-       /* router checker state */
-       struct lnet_rc_data     *lpni_rcd;
 };
 
 /* Preferred path added due to traffic on non-MR peer_ni */
@@ -641,6 +620,9 @@ struct lnet_peer {
        /* 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;
 
@@ -650,15 +632,18 @@ struct lnet_peer {
        /* # refs from lnet_route_t::lr_gateway */
        int                     lp_rtr_refcount;
 
+       /*
+        * peer specific health sensitivity value to decrement peer nis in
+        * this peer with if set to something other than 0
+        */
+       __u32                   lp_health_sensitivity;
+
        /* messages blocking for router credits */
        struct list_head        lp_rtrq;
 
        /* 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;
 
@@ -760,6 +745,12 @@ struct lnet_peer {
 #define LNET_PEER_FORCE_PING   (1 << 13)       /* Forced Ping */
 #define LNET_PEER_FORCE_PUSH   (1 << 14)       /* Forced Push */
 
+/* force delete even if router */
+#define LNET_PEER_RTR_NI_FORCE_DEL (1 << 15)
+
+/* gw undergoing alive discovery */
+#define LNET_PEER_RTR_DISCOVERY (1 << 16)
+
 struct lnet_peer_net {
        /* chain on lp_peer_nets */
        struct list_head        lpn_peer_nets;
@@ -773,6 +764,12 @@ struct lnet_peer_net {
        /* 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;
 };
@@ -818,10 +815,10 @@ struct lnet_route {
        struct list_head        lr_list;        /* chain on net */
        struct list_head        lr_gwlist;      /* chain on gateway */
        struct lnet_peer        *lr_gateway;    /* router node */
+       lnet_nid_t              lr_nid;         /* NID used to add route */
        __u32                   lr_net;         /* remote network number */
        __u32                   lr_lnet;        /* local network number */
        int                     lr_seq;         /* sequence for round-robin */
-       unsigned int            lr_downis;      /* number of down NIs */
        __u32                   lr_hops;        /* how far I am */
        unsigned int            lr_priority;    /* route priority */
 };
@@ -1094,12 +1091,6 @@ struct lnet {
 
        /* monitor thread startup/shutdown state */
        int                             ln_mt_state;
-       /* router checker's event queue */
-       struct lnet_handle_eq           ln_rc_eqh;
-       /* rcd still pending on net */
-       struct list_head                ln_rcd_deathrow;
-       /* rcd ready for free */
-       struct list_head                ln_rcd_zombie;
        /* serialise startup/shutdown */
        struct semaphore                ln_mt_signal;