Whamcloud - gitweb
i=liang,b=13065:
[fs/lustre-release.git] / lnet / lnet / router_proc.c
index ce8c6b3..6247c53 100644 (file)
 
 #if defined(__KERNEL__) && defined(LNET_ROUTER)
 
+#if defined(__linux__)
 #include <linux/seq_file.h>
+#endif
 
 /* this is really lnet_proc.c */
 
-#define LNET_PROC_STATS   "sys/lnet/stats"
-#define LNET_PROC_ROUTES  "sys/lnet/routes"
-#define LNET_PROC_ROUTERS "sys/lnet/routers"
-#define LNET_PROC_PEERS   "sys/lnet/peers"
-#define LNET_PROC_BUFFERS "sys/lnet/buffers"
-#define LNET_PROC_NIS     "sys/lnet/nis"
+#define LNET_PROC_ROOT    "sys/lnet"
+#define LNET_PROC_STATS   LNET_PROC_ROOT"/stats"
+#define LNET_PROC_ROUTES  LNET_PROC_ROOT"/routes"
+#define LNET_PROC_ROUTERS LNET_PROC_ROOT"/routers"
+#define LNET_PROC_PEERS   LNET_PROC_ROOT"/peers"
+#define LNET_PROC_BUFFERS LNET_PROC_ROOT"/buffers"
+#define LNET_PROC_NIS     LNET_PROC_ROOT"/nis"
 
 static int
 lnet_router_proc_stats_read (char *page, char **start, off_t off,
@@ -248,10 +251,10 @@ lnet_route_seq_show (struct seq_file *s, void *iter)
 }
 
 static struct seq_operations lnet_routes_sops = {
-        .start = lnet_route_seq_start,
-        .stop  = lnet_route_seq_stop,
-        .next  = lnet_route_seq_next,
-        .show  = lnet_route_seq_show,
+        /* start */ lnet_route_seq_start,
+        /* stop */  lnet_route_seq_stop,
+        /* next */  lnet_route_seq_next,
+        /* show */  lnet_route_seq_show,
 };
 
 static int
@@ -270,13 +273,17 @@ lnet_route_seq_open(struct inode *inode, struct file *file)
         return rc;
 }
 
-static struct file_operations lnet_routes_fops = {
-        .owner   = THIS_MODULE,
-        .open    = lnet_route_seq_open,
-        .read    = seq_read,
-        .llseek  = seq_lseek,
-        .release = seq_release,
-};
+static struct file_operations lnet_routes_fops;
+
+static void
+lnet_init_routes_fops(void)
+{
+        lnet_routes_fops.owner   =  THIS_MODULE;
+        lnet_routes_fops.llseek  =  seq_lseek;
+        lnet_routes_fops.read    =  seq_read;
+        lnet_routes_fops.open    =  lnet_route_seq_open;
+        lnet_routes_fops.release =  seq_release;
+}
 
 typedef struct {
         __u64                lrtrsi_version;
@@ -426,7 +433,7 @@ lnet_router_seq_show (struct seq_file *s, void *iter)
 
         LNET_UNLOCK();
 
-        seq_printf(s, 
+        seq_printf(s,
                    "%-4d %7d %9d %6s %12lu %s\n", nrefs, nrtrrefs,
                    alive_cnt, alive ? "up" : "down",
                    last_ping, libcfs_nid2str(nid));
@@ -434,10 +441,10 @@ lnet_router_seq_show (struct seq_file *s, void *iter)
 }
 
 static struct seq_operations lnet_routers_sops = {
-        .start = lnet_router_seq_start,
-        .stop  = lnet_router_seq_stop,
-        .next  = lnet_router_seq_next,
-        .show  = lnet_router_seq_show,
+        /* start */ lnet_router_seq_start,
+        /* stop */  lnet_router_seq_stop,
+        /* next */  lnet_router_seq_next,
+        /* show */  lnet_router_seq_show,
 };
 
 static int
@@ -456,13 +463,17 @@ lnet_router_seq_open(struct inode *inode, struct file *file)
         return rc;
 }
 
-static struct file_operations lnet_routers_fops = {
-        .owner   = THIS_MODULE,
-        .open    = lnet_router_seq_open,
-        .read    = seq_read,
-        .llseek  = seq_lseek,
-        .release = seq_release,
-};
+static struct file_operations lnet_routers_fops;
+
+static void
+lnet_init_routers_fops(void)
+{
+        lnet_routers_fops.owner   =  THIS_MODULE;
+        lnet_routers_fops.llseek  =  seq_lseek;
+        lnet_routers_fops.read    =  seq_read;
+        lnet_routers_fops.open    =  lnet_router_seq_open;
+        lnet_routers_fops.release =  seq_release;
+}
 
 typedef struct {
         unsigned long long   lpsi_version;
@@ -592,6 +603,7 @@ static int
 lnet_peer_seq_show (struct seq_file *s, void *iter)
 {
         lnet_peer_seq_iterator_t *lpsi = iter;
+        char                     *aliveness = "NA";
         lnet_peer_t              *lp;
         lnet_nid_t                nid;
         int                       maxcr;
@@ -599,8 +611,6 @@ lnet_peer_seq_show (struct seq_file *s, void *iter)
         int                       txcr;
         int                       minrtrcr;
         int                       rtrcr;
-        int                       alive;
-        int                       rtr;
         int                       txqnob;
         int                       nrefs;
 
@@ -628,25 +638,25 @@ lnet_peer_seq_show (struct seq_file *s, void *iter)
         mintxcr  = lp->lp_mintxcredits;
         rtrcr    = lp->lp_rtrcredits;
         minrtrcr = lp->lp_minrtrcredits;
-        rtr      = lnet_isrouter(lp);
-        alive    = lp->lp_alive;
         txqnob   = lp->lp_txqnob;
         nrefs    = lp->lp_refcount;
 
+        if (lnet_isrouter(lp) || lp->lp_ni->ni_peertimeout > 0)
+                aliveness = lp->lp_alive ? "up" : "down";
+
         LNET_UNLOCK();
 
         seq_printf(s, "%-24s %4d %5s %5d %5d %5d %5d %5d %d\n",
-                   libcfs_nid2str(nid), nrefs, 
-                   !rtr ? "~rtr" : (alive ? "up" : "down"),
+                   libcfs_nid2str(nid), nrefs, aliveness,
                    maxcr, rtrcr, minrtrcr, txcr, mintxcr, txqnob);
         return 0;
 }
 
 static struct seq_operations lnet_peer_sops = {
-        .start = lnet_peer_seq_start,
-        .stop  = lnet_peer_seq_stop,
-        .next  = lnet_peer_seq_next,
-        .show  = lnet_peer_seq_show,
+        /* start */ lnet_peer_seq_start,
+        /* stop */  lnet_peer_seq_stop,
+        /* next */  lnet_peer_seq_next,
+        /* show */  lnet_peer_seq_show,
 };
 
 static int
@@ -665,13 +675,17 @@ lnet_peer_seq_open(struct inode *inode, struct file *file)
         return rc;
 }
 
-static struct file_operations lnet_peer_fops = {
-        .owner   = THIS_MODULE,
-        .open    = lnet_peer_seq_open,
-        .read    = seq_read,
-        .llseek  = seq_lseek,
-        .release = seq_release,
-};
+static struct file_operations lnet_peer_fops;
+
+static void
+lnet_init_peer_fops(void)
+{
+        lnet_peer_fops.owner   =  THIS_MODULE;
+        lnet_peer_fops.llseek  =  seq_lseek;
+        lnet_peer_fops.read    =  seq_read;
+        lnet_peer_fops.open    =  lnet_peer_seq_open;
+        lnet_peer_fops.release =  seq_release;
+}
 
 typedef struct {
         int                  lbsi_idx;
@@ -803,10 +817,10 @@ lnet_buffer_seq_show (struct seq_file *s, void *iter)
 }
 
 static struct seq_operations lnet_buffer_sops = {
-        .start = lnet_buffer_seq_start,
-        .stop  = lnet_buffer_seq_stop,
-        .next  = lnet_buffer_seq_next,
-        .show  = lnet_buffer_seq_show,
+        /* start */ lnet_buffer_seq_start,
+        /* stop */  lnet_buffer_seq_stop,
+        /* next */  lnet_buffer_seq_next,
+        /* show */  lnet_buffer_seq_show,
 };
 
 static int
@@ -825,13 +839,17 @@ lnet_buffer_seq_open(struct inode *inode, struct file *file)
         return rc;
 }
 
-static struct file_operations lnet_buffers_fops = {
-        .owner   = THIS_MODULE,
-        .open    = lnet_buffer_seq_open,
-        .read    = seq_read,
-        .llseek  = seq_lseek,
-        .release = seq_release,
-};
+static struct file_operations lnet_buffers_fops;
+
+static void
+lnet_init_buffers_fops(void)
+{
+        lnet_buffers_fops.owner   =  THIS_MODULE;
+        lnet_buffers_fops.llseek  =  seq_lseek;
+        lnet_buffers_fops.read    =  seq_read;
+        lnet_buffers_fops.open    =  lnet_buffer_seq_open;
+        lnet_buffers_fops.release =  seq_release;
+}
 
 typedef struct {
         lnet_ni_t           *lnsi_ni;
@@ -940,12 +958,13 @@ lnet_ni_seq_show (struct seq_file *s, void *iter)
         int                     txcr;
         int                     mintxcr;
         int                     npeertxcr;
+        int                     npeerrtrcr;
         lnet_nid_t              nid;
         int                     nref;
 
         if (lnsi->lnsi_off == 0) {
-                seq_printf(s, "%-24s %4s %4s %5s %5s %5s\n",
-                           "nid", "refs", "peer", "max", "tx", "min");
+                seq_printf(s, "%-24s %4s %4s %4s %5s %5s %5s\n",
+                           "nid", "refs", "peer", "rtr", "max", "tx", "min");
                 return 0;
         }
 
@@ -955,26 +974,27 @@ lnet_ni_seq_show (struct seq_file *s, void *iter)
 
         ni = lnsi->lnsi_ni;
 
-        maxtxcr   = ni->ni_maxtxcredits;
-        txcr      = ni->ni_txcredits;
-        mintxcr   = ni->ni_mintxcredits;
-        npeertxcr = ni->ni_peertxcredits;
-        nid       = ni->ni_nid;
-        nref      = ni->ni_refcount;
+        maxtxcr    = ni->ni_maxtxcredits;
+        txcr       = ni->ni_txcredits;
+        mintxcr    = ni->ni_mintxcredits;
+        npeertxcr  = ni->ni_peertxcredits;
+        npeerrtrcr = ni->ni_peerrtrcredits;
+        nid        = ni->ni_nid;
+        nref       = ni->ni_refcount;
 
         LNET_UNLOCK();
 
-        seq_printf(s, "%-24s %4d %4d %5d %5d %5d\n",
+        seq_printf(s, "%-24s %4d %4d %4d %5d %5d %5d\n",
                    libcfs_nid2str(nid), nref,
-                   npeertxcr, maxtxcr, txcr, mintxcr);
+                   npeertxcr, npeerrtrcr, maxtxcr, txcr, mintxcr);
         return 0;
 }
 
 static struct seq_operations lnet_ni_sops = {
-        .start = lnet_ni_seq_start,
-        .stop  = lnet_ni_seq_stop,
-        .next  = lnet_ni_seq_next,
-        .show  = lnet_ni_seq_show,
+        /* start */ lnet_ni_seq_start,
+        /* stop */  lnet_ni_seq_stop,
+        /* next */  lnet_ni_seq_next,
+        /* show */  lnet_ni_seq_show,
 };
 
 static int
@@ -993,19 +1013,30 @@ lnet_ni_seq_open(struct inode *inode, struct file *file)
         return rc;
 }
 
-static struct file_operations lnet_ni_fops = {
-        .owner   = THIS_MODULE,
-        .open    = lnet_ni_seq_open,
-        .read    = seq_read,
-        .llseek  = seq_lseek,
-        .release = seq_release,
-};
+static struct file_operations lnet_ni_fops;
+
+static void
+lnet_init_ni_fops(void)
+{
+        lnet_ni_fops.owner   =  THIS_MODULE;
+        lnet_ni_fops.llseek  =  seq_lseek;
+        lnet_ni_fops.read    =  seq_read;
+        lnet_ni_fops.open    =  lnet_ni_seq_open;
+        lnet_ni_fops.release =  seq_release;
+}
 
 void
 lnet_proc_init(void)
 {
         struct proc_dir_entry *pde;
 
+#if 0
+        pde = proc_mkdir(LNET_PROC_ROOT, NULL);
+        if (pde == NULL) {
+                CERROR("couldn't create "LNET_PROC_ROOT"\n");
+                return; 
+        }
+#endif
         /* Initialize LNET_PROC_STATS */
         pde = create_proc_entry (LNET_PROC_STATS, 0644, NULL);
         if (pde == NULL) {
@@ -1024,6 +1055,7 @@ lnet_proc_init(void)
                 return;
         }
 
+        lnet_init_routes_fops();
         pde->proc_fops = &lnet_routes_fops;
         pde->data = NULL;
 
@@ -1034,6 +1066,7 @@ lnet_proc_init(void)
                 return;
         }
 
+        lnet_init_routers_fops();
         pde->proc_fops = &lnet_routers_fops;
         pde->data = NULL;
 
@@ -1044,6 +1077,7 @@ lnet_proc_init(void)
                 return;
         }
 
+        lnet_init_peer_fops();
         pde->proc_fops = &lnet_peer_fops;
         pde->data = NULL;
 
@@ -1054,6 +1088,7 @@ lnet_proc_init(void)
                 return;
         }
 
+        lnet_init_buffers_fops();
         pde->proc_fops = &lnet_buffers_fops;
         pde->data = NULL;
 
@@ -1064,6 +1099,7 @@ lnet_proc_init(void)
                 return;
         }
 
+        lnet_init_ni_fops();
         pde->proc_fops = &lnet_ni_fops;
         pde->data = NULL;
 }
@@ -1077,6 +1113,9 @@ lnet_proc_fini(void)
         remove_proc_entry(LNET_PROC_PEERS, 0);
         remove_proc_entry(LNET_PROC_BUFFERS, 0);
         remove_proc_entry(LNET_PROC_NIS, 0);
+#if 0   
+        remove_proc_entry(LNET_PROC_ROOT, 0);
+#endif
 }
 
 #else