1131}
1132
1133static const struct seq_operations rose_node_seqops = {
1134 .start = rose_node_start,
1135 .next = rose_node_next,
1136 .stop = rose_node_stop,
1137 .show = rose_node_show,
1138};
1139
1140static int rose_nodes_open(struct inode *inode, struct file *file)
1141{
1142 return seq_open(file, &rose_node_seqops);
1143}
1144
1145const struct file_operations rose_nodes_fops = {
1146 .owner = THIS_MODULE,
1147 .open = rose_nodes_open,
1148 .read = seq_read,
1149 .llseek = seq_lseek,
1150 .release = seq_release,
1151};
1152
1153static void *rose_neigh_start(struct seq_file *seq, loff_t *pos)
1154 __acquires(rose_neigh_list_lock)
1155{
1156 struct rose_neigh *rose_neigh;
1157 int i = 1;
1158
1159 spin_lock_bh(&rose_neigh_list_lock);
1160 if (*pos == 0)
1161 return SEQ_START_TOKEN;
1162
1163 for (rose_neigh = rose_neigh_list; rose_neigh && i < *pos;
1164 rose_neigh = rose_neigh->next, ++i);
1165
1166 return (i == *pos) ? rose_neigh : NULL;
1167}
1168
1169static void *rose_neigh_next(struct seq_file *seq, void *v, loff_t *pos)
1170{
1171 ++*pos;