|
@@ -674,7 +674,6 @@ struct list_head *seq_list_start(struct list_head *head, loff_t pos)
|
|
|
|
|
|
return NULL;
|
|
return NULL;
|
|
}
|
|
}
|
|
-
|
|
|
|
EXPORT_SYMBOL(seq_list_start);
|
|
EXPORT_SYMBOL(seq_list_start);
|
|
|
|
|
|
struct list_head *seq_list_start_head(struct list_head *head, loff_t pos)
|
|
struct list_head *seq_list_start_head(struct list_head *head, loff_t pos)
|
|
@@ -684,7 +683,6 @@ struct list_head *seq_list_start_head(struct list_head *head, loff_t pos)
|
|
|
|
|
|
return seq_list_start(head, pos - 1);
|
|
return seq_list_start(head, pos - 1);
|
|
}
|
|
}
|
|
-
|
|
|
|
EXPORT_SYMBOL(seq_list_start_head);
|
|
EXPORT_SYMBOL(seq_list_start_head);
|
|
|
|
|
|
struct list_head *seq_list_next(void *v, struct list_head *head, loff_t *ppos)
|
|
struct list_head *seq_list_next(void *v, struct list_head *head, loff_t *ppos)
|
|
@@ -695,5 +693,60 @@ struct list_head *seq_list_next(void *v, struct list_head *head, loff_t *ppos)
|
|
++*ppos;
|
|
++*ppos;
|
|
return lh == head ? NULL : lh;
|
|
return lh == head ? NULL : lh;
|
|
}
|
|
}
|
|
-
|
|
|
|
EXPORT_SYMBOL(seq_list_next);
|
|
EXPORT_SYMBOL(seq_list_next);
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * seq_hlist_start - start an iteration of a hlist
|
|
|
|
+ * @head: the head of the hlist
|
|
|
|
+ * @pos: the start position of the sequence
|
|
|
|
+ *
|
|
|
|
+ * Called at seq_file->op->start().
|
|
|
|
+ */
|
|
|
|
+struct hlist_node *seq_hlist_start(struct hlist_head *head, loff_t pos)
|
|
|
|
+{
|
|
|
|
+ struct hlist_node *node;
|
|
|
|
+
|
|
|
|
+ hlist_for_each(node, head)
|
|
|
|
+ if (pos-- == 0)
|
|
|
|
+ return node;
|
|
|
|
+ return NULL;
|
|
|
|
+}
|
|
|
|
+EXPORT_SYMBOL(seq_hlist_start);
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * seq_hlist_start_head - start an iteration of a hlist
|
|
|
|
+ * @head: the head of the hlist
|
|
|
|
+ * @pos: the start position of the sequence
|
|
|
|
+ *
|
|
|
|
+ * Called at seq_file->op->start(). Call this function if you want to
|
|
|
|
+ * print a header at the top of the output.
|
|
|
|
+ */
|
|
|
|
+struct hlist_node *seq_hlist_start_head(struct hlist_head *head, loff_t pos)
|
|
|
|
+{
|
|
|
|
+ if (!pos)
|
|
|
|
+ return SEQ_START_TOKEN;
|
|
|
|
+
|
|
|
|
+ return seq_hlist_start(head, pos - 1);
|
|
|
|
+}
|
|
|
|
+EXPORT_SYMBOL(seq_hlist_start_head);
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * seq_hlist_next - move to the next position of the hlist
|
|
|
|
+ * @v: the current iterator
|
|
|
|
+ * @head: the head of the hlist
|
|
|
|
+ * @pos: the current posision
|
|
|
|
+ *
|
|
|
|
+ * Called at seq_file->op->next().
|
|
|
|
+ */
|
|
|
|
+struct hlist_node *seq_hlist_next(void *v, struct hlist_head *head,
|
|
|
|
+ loff_t *ppos)
|
|
|
|
+{
|
|
|
|
+ struct hlist_node *node = v;
|
|
|
|
+
|
|
|
|
+ ++*ppos;
|
|
|
|
+ if (v == SEQ_START_TOKEN)
|
|
|
|
+ return head->first;
|
|
|
|
+ else
|
|
|
|
+ return node->next;
|
|
|
|
+}
|
|
|
|
+EXPORT_SYMBOL(seq_hlist_next);
|