- return -ESTALE;
- }
-
- net = lrsi->lrsi_net->lrn_net;
- hops = lrsi->lrsi_net->lrn_hops;
- nid = lrsi->lrsi_route->lr_gateway->lp_nid;
- alive = lrsi->lrsi_route->lr_gateway->lp_alive;
-
- LNET_UNLOCK();
-
- seq_printf(s, "%-8s %4u %7s %s\n", libcfs_net2str(net), hops,
- alive ? "up" : "down", libcfs_nid2str(nid));
- return 0;
-}
-
-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,
-};
-
-static int
-lnet_route_seq_open(struct inode *inode, struct file *file)
-{
- struct proc_dir_entry *dp = PDE(inode);
- struct seq_file *sf;
- int rc;
-
- rc = seq_open(file, &lnet_routes_sops);
- if (rc == 0) {
- sf = file->private_data;
- sf->private = dp->data;
- }
-
- 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,
-};
-
-typedef struct {
- __u64 lrtrsi_version;
- lnet_peer_t *lrtrsi_router;
- loff_t lrtrsi_off;
-} lnet_router_seq_iterator_t;
-
-int
-lnet_router_seq_seek (lnet_router_seq_iterator_t *lrtrsi, loff_t off)
-{
- struct list_head *r;
- lnet_peer_t *lp;
- int rc;
- loff_t here;
-
- if (off == 0) {
- lrtrsi->lrtrsi_router = NULL;
- lrtrsi->lrtrsi_off = 0;
- return 0;
- }
-
- LNET_LOCK();
-
- lp = lrtrsi->lrtrsi_router;
-
- if (lp != NULL &&
- lrtrsi->lrtrsi_version != the_lnet.ln_routers_version) {
- /* tables have changed */
- rc = -ESTALE;
- goto out;
- }
-
- if (lp == NULL || lrtrsi->lrtrsi_off > off) {
- /* search from start */
- r = the_lnet.ln_routers.next;
- here = 1;
- } else {
- /* continue search */
- r = &lp->lp_rtr_list;
- here = lrtrsi->lrtrsi_off;