Whamcloud - gitweb
LU-9078 lnet: Fix route hops print
[fs/lustre-release.git] / lnet / lnet / router_proc.c
index 40d0289..8b25f0f 100644 (file)
@@ -224,11 +224,11 @@ proc_lnet_routes(struct ctl_table *table, int write, void __user *buffer,
                        __u32        net        = rnet->lrn_net;
                        __u32 hops              = route->lr_hops;
                        unsigned int priority   = route->lr_priority;
-                       lnet_nid_t   nid        = route->lr_gateway->lp_nid;
-                       int          alive      = lnet_is_route_alive(route);
+                       lnet_nid_t   nid        = route->lr_gateway->lpni_nid;
+                       int          alive      = lnet_is_route_alive(route);
 
                        s += snprintf(s, tmpstr + tmpsiz - s,
-                                     "%-8s %4u %8u %7s %s\n",
+                                     "%-8s %4d %8u %7s %s\n",
                                      libcfs_net2str(net), hops,
                                      priority,
                                      alive ? "up" : "down",
@@ -300,7 +300,7 @@ proc_lnet_routers(struct ctl_table *table, int write, void __user *buffer,
                *ppos = LNET_PROC_POS_MAKE(0, ver, 0, off);
        } else {
                struct list_head *r;
-               struct lnet_peer *peer = NULL;
+               struct lnet_peer_ni *peer = NULL;
                int               skip = off - 1;
 
                lnet_net_lock(0);
@@ -315,8 +315,9 @@ proc_lnet_routers(struct ctl_table *table, int write, void __user *buffer,
                r = the_lnet.ln_routers.next;
 
                while (r != &the_lnet.ln_routers) {
-                       lnet_peer_t *lp = list_entry(r, lnet_peer_t,
-                                                    lp_rtr_list);
+                       struct lnet_peer_ni *lp =
+                         list_entry(r, struct lnet_peer_ni,
+                                    lpni_rtr_list);
 
                        if (skip == 0) {
                                peer = lp;
@@ -328,22 +329,22 @@ proc_lnet_routers(struct ctl_table *table, int write, void __user *buffer,
                }
 
                if (peer != NULL) {
-                       lnet_nid_t nid = peer->lp_nid;
+                       lnet_nid_t nid = peer->lpni_nid;
                        cfs_time_t now = cfs_time_current();
-                       cfs_time_t deadline = peer->lp_ping_deadline;
-                       int nrefs     = peer->lp_refcount;
-                       int nrtrrefs  = peer->lp_rtr_refcount;
-                       int alive_cnt = peer->lp_alive_count;
-                       int alive     = peer->lp_alive;
-                       int pingsent  = !peer->lp_ping_notsent;
+                       cfs_time_t deadline = peer->lpni_ping_deadline;
+                       int nrefs     = atomic_read(&peer->lpni_refcount);
+                       int nrtrrefs  = peer->lpni_rtr_refcount;
+                       int alive_cnt = peer->lpni_alive_count;
+                       int alive     = peer->lpni_alive;
+                       int pingsent  = !peer->lpni_ping_notsent;
                        int last_ping = cfs_duration_sec(cfs_time_sub(now,
-                                                    peer->lp_ping_timestamp));
+                                                    peer->lpni_ping_timestamp));
                        int down_ni   = 0;
                        lnet_route_t *rtr;
 
-                       if ((peer->lp_ping_feats &
+                       if ((peer->lpni_ping_feats &
                             LNET_PING_FEAT_NI_STATUS) != 0) {
-                               list_for_each_entry(rtr, &peer->lp_routes,
+                               list_for_each_entry(rtr, &peer->lpni_routes,
                                                    lr_gwlist) {
                                        /* downis on any route should be the
                                         * number of downis on the gateway */
@@ -396,6 +397,8 @@ proc_lnet_routers(struct ctl_table *table, int write, void __user *buffer,
        return rc;
 }
 
+/* TODO: there should be no direct access to ptable. We should add a set
+ * of APIs that give access to the ptable and its members */
 static int
 proc_lnet_peers(struct ctl_table *table, int write, void __user *buffer,
                size_t *lenp, loff_t *ppos)
@@ -437,7 +440,7 @@ proc_lnet_peers(struct ctl_table *table, int write, void __user *buffer,
 
                hoff++;
        } else {
-               struct lnet_peer        *peer;
+               struct lnet_peer_ni     *peer;
                struct list_head        *p;
                int                     skip;
  again:
@@ -461,15 +464,16 @@ proc_lnet_peers(struct ctl_table *table, int write, void __user *buffer,
                                p = ptable->pt_hash[hash].next;
 
                        while (p != &ptable->pt_hash[hash]) {
-                               lnet_peer_t *lp = list_entry(p, lnet_peer_t,
-                                                            lp_hashlist);
+                               struct lnet_peer_ni *lp =
+                                 list_entry(p, struct lnet_peer_ni,
+                                            lpni_hashlist);
                                if (skip == 0) {
                                        peer = lp;
 
                                        /* minor optimization: start from idx+1
                                         * on next iteration if we've just
-                                        * drained lp_hashlist */
-                                       if (lp->lp_hashlist.next ==
+                                        * drained lpni_hashlist */
+                                       if (lp->lpni_hashlist.next ==
                                            &ptable->pt_hash[hash]) {
                                                hoff = 1;
                                                hash++;
@@ -481,7 +485,7 @@ proc_lnet_peers(struct ctl_table *table, int write, void __user *buffer,
                                }
 
                                skip--;
-                               p = lp->lp_hashlist.next;
+                               p = lp->lpni_hashlist.next;
                        }
 
                        if (peer != NULL)
@@ -490,29 +494,30 @@ proc_lnet_peers(struct ctl_table *table, int write, void __user *buffer,
                        p = NULL;
                        hoff = 1;
                        hash++;
-               }
+                }
 
                if (peer != NULL) {
-                       lnet_nid_t nid       = peer->lp_nid;
-                       int        nrefs     = peer->lp_refcount;
-                       int        lastalive = -1;
-                       char      *aliveness = "NA";
-                       int        maxcr     = peer->lp_ni->ni_peertxcredits;
-                       int        txcr      = peer->lp_txcredits;
-                       int        mintxcr   = peer->lp_mintxcredits;
-                       int        rtrcr     = peer->lp_rtrcredits;
-                       int        minrtrcr  = peer->lp_minrtrcredits;
-                       int        txqnob    = peer->lp_txqnob;
+                       lnet_nid_t nid = peer->lpni_nid;
+                       int nrefs = atomic_read(&peer->lpni_refcount);
+                       int lastalive = -1;
+                       char *aliveness = "NA";
+                       int maxcr = (peer->lpni_net) ?
+                         peer->lpni_net->net_tunables.lct_peer_tx_credits : 0;
+                       int txcr = peer->lpni_txcredits;
+                       int mintxcr = peer->lpni_mintxcredits;
+                       int rtrcr = peer->lpni_rtrcredits;
+                       int minrtrcr = peer->lpni_minrtrcredits;
+                       int txqnob = peer->lpni_txqnob;
 
                        if (lnet_isrouter(peer) ||
                            lnet_peer_aliveness_enabled(peer))
-                               aliveness = peer->lp_alive ? "up" : "down";
+                               aliveness = peer->lpni_alive ? "up" : "down";
 
                        if (lnet_peer_aliveness_enabled(peer)) {
-                               cfs_time_t     now = cfs_time_current();
+                               cfs_time_t now = cfs_time_current();
                                cfs_duration_t delta;
 
-                               delta = cfs_time_sub(now, peer->lp_last_alive);
+                               delta = cfs_time_sub(now, peer->lpni_last_alive);
                                lastalive = cfs_duration_sec(delta);
 
                                /* No need to mess up peers contents with
@@ -656,32 +661,19 @@ proc_lnet_nis(struct ctl_table *table, int write, void __user *buffer,
                              "%-24s %6s %5s %4s %4s %4s %5s %5s %5s\n",
                              "nid", "status", "alive", "refs", "peer",
                              "rtr", "max", "tx", "min");
-               LASSERT(tmpstr + tmpsiz - s > 0);
+               LASSERT (tmpstr + tmpsiz - s > 0);
        } else {
-               struct list_head  *n;
-               lnet_ni_t         *ni   = NULL;
-               int                skip = *ppos - 1;
+               lnet_ni_t         *ni   = NULL;
+               int                skip = *ppos - 1;
 
                lnet_net_lock(0);
 
-               n = the_lnet.ln_nis.next;
-
-               while (n != &the_lnet.ln_nis) {
-                       lnet_ni_t *a_ni = list_entry(n, lnet_ni_t, ni_list);
-
-                       if (skip == 0) {
-                               ni = a_ni;
-                               break;
-                       }
-
-                       skip--;
-                       n = n->next;
-               }
+               ni = lnet_get_ni_idx_locked(skip);
 
                if (ni != NULL) {
                        struct lnet_tx_queue    *tq;
                        char    *stat;
-                       long    now = cfs_time_current_sec();
+                       time64_t now = ktime_get_real_seconds();
                        int     last_alive = -1;
                        int     i;
                        int     j;
@@ -690,7 +682,7 @@ proc_lnet_nis(struct ctl_table *table, int write, void __user *buffer,
                                last_alive = now - ni->ni_last_alive;
 
                        /* @lo forever alive */
-                       if (ni->ni_lnd->lnd_type == LOLND)
+                       if (ni->ni_net->net_lnd->lnd_type == LOLND)
                                last_alive = 0;
 
                        lnet_ni_lock(ni);
@@ -718,8 +710,8 @@ proc_lnet_nis(struct ctl_table *table, int write, void __user *buffer,
                                      "%-24s %6s %5d %4d %4d %4d %5d %5d %5d\n",
                                      libcfs_nid2str(ni->ni_nid), stat,
                                      last_alive, *ni->ni_refs[i],
-                                     ni->ni_peertxcredits,
-                                     ni->ni_peerrtrcredits,
+                                     ni->ni_net->net_tunables.lct_peer_tx_credits,
+                                     ni->ni_net->net_tunables.lct_peer_rtr_credits,
                                      tq->tq_credits_max,
                                      tq->tq_credits, tq->tq_credits_min);
                                if (i != 0)