From: Zhi Yong Wu <wuzhy@xxxxxxxxxxxxxxxxxx> The patch will introduce one set of rcu interface for seq_list. Signed-off-by: Chandra Seetharaman <sekharan@xxxxxxxxxx> Signed-off-by: Zhi Yong Wu <wuzhy@xxxxxxxxxxxxxxxxxx> --- fs/seq_file.c | 37 +++++++++++++++++++++++++++++++++++++ include/linux/seq_file.h | 7 +++++++ 2 files changed, 44 insertions(+) diff --git a/fs/seq_file.c b/fs/seq_file.c index 774c1eb..301caa7 100644 --- a/fs/seq_file.c +++ b/fs/seq_file.c @@ -795,6 +795,43 @@ struct list_head *seq_list_next(void *v, struct list_head *head, loff_t *ppos) } EXPORT_SYMBOL(seq_list_next); +struct list_head *seq_list_start_rcu(struct list_head *head, loff_t pos) +{ + struct list_head *lh; + + __list_for_each_rcu(lh, head) + if (pos-- == 0) + return lh; + + return NULL; +} +EXPORT_SYMBOL(seq_list_start_rcu); + +struct list_head *seq_list_start_head_rcu(struct list_head *head, loff_t pos) +{ + if (!pos) + return head; + + return seq_list_start_rcu(head, pos - 1); +} +EXPORT_SYMBOL(seq_list_start_head_rcu); + +struct list_head *seq_list_next_rcu(void *v, struct list_head *head, + loff_t *ppos) +{ + struct list_head *lh; + + ++*ppos; + rcu_read_lock(); + lh = rcu_dereference(((struct list_head *)v)->next); + if (lh == head) + lh = NULL; + rcu_read_unlock(); + + return lh; +} +EXPORT_SYMBOL(seq_list_next_rcu); + /** * seq_hlist_start - start an iteration of a hlist * @head: the head of the hlist diff --git a/include/linux/seq_file.h b/include/linux/seq_file.h index 2da29ac..7e391c9 100644 --- a/include/linux/seq_file.h +++ b/include/linux/seq_file.h @@ -155,6 +155,13 @@ extern struct list_head *seq_list_start_head(struct list_head *head, extern struct list_head *seq_list_next(void *v, struct list_head *head, loff_t *ppos); +extern struct list_head *seq_list_start_rcu(struct list_head *head, + loff_t pos); +extern struct list_head *seq_list_start_head_rcu(struct list_head *head, + loff_t pos); +extern struct list_head *seq_list_next_rcu(void *v, struct list_head *head, + loff_t *ppos); + /* * Helpers for iteration over hlist_head-s in seq_files */ -- 1.7.11.7 -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html