923}
924
925static const struct seq_operations nr_node_seqops = {
926 .start = nr_node_start,
927 .next = nr_node_next,
928 .stop = nr_node_stop,
929 .show = nr_node_show,
930};
931
932static int nr_node_info_open(struct inode *inode, struct file *file)
933{
934 return seq_open(file, &nr_node_seqops);
935}
936
937const struct file_operations nr_nodes_fops = {
938 .owner = THIS_MODULE,
939 .open = nr_node_info_open,
940 .read = seq_read,
941 .llseek = seq_lseek,
942 .release = seq_release,
943};
944
945static void *nr_neigh_start(struct seq_file *seq, loff_t *pos)
946{
947 struct nr_neigh *nr_neigh;
948 struct hlist_node *node;
949 int i = 1;
950
951 spin_lock_bh(&nr_neigh_list_lock);
952 if (*pos == 0)
953 return SEQ_START_TOKEN;
954
955 nr_neigh_for_each(nr_neigh, node, &nr_neigh_list) {
956 if (i == *pos)
957 return nr_neigh;
958 }
959 return NULL;
960}
961
962static void *nr_neigh_next(struct seq_file *seq, void *v, loff_t *pos)
963{