lockdep: Simplify lockdep seqfile code

Use seq_list_start_head() and seq_list_next().

Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
Cc: Peter Zijlstra <peterz@infradead.org>
LKML-Reference: <4A88ED41.5000000@cn.fujitsu.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
Li Zefan 2009-08-17 13:40:17 +08:00 committed by Ingo Molnar
parent e9d65725bd
commit 8109e1de85

View File

@ -25,38 +25,12 @@
static void *l_next(struct seq_file *m, void *v, loff_t *pos) static void *l_next(struct seq_file *m, void *v, loff_t *pos)
{ {
struct lock_class *class; return seq_list_next(v, &all_lock_classes, pos);
(*pos)++;
if (v == SEQ_START_TOKEN)
class = m->private;
else {
class = v;
if (class->lock_entry.next != &all_lock_classes)
class = list_entry(class->lock_entry.next,
struct lock_class, lock_entry);
else
class = NULL;
}
return class;
} }
static void *l_start(struct seq_file *m, loff_t *pos) static void *l_start(struct seq_file *m, loff_t *pos)
{ {
struct lock_class *class; return seq_list_start_head(&all_lock_classes, *pos);
loff_t i = 0;
if (*pos == 0)
return SEQ_START_TOKEN;
list_for_each_entry(class, &all_lock_classes, lock_entry) {
if (++i == *pos)
return class;
}
return NULL;
} }
static void l_stop(struct seq_file *m, void *v) static void l_stop(struct seq_file *m, void *v)
@ -82,11 +56,11 @@ static void print_name(struct seq_file *m, struct lock_class *class)
static int l_show(struct seq_file *m, void *v) static int l_show(struct seq_file *m, void *v)
{ {
struct lock_class *class = v; struct lock_class *class = list_entry(v, struct lock_class, lock_entry);
struct lock_list *entry; struct lock_list *entry;
char usage[LOCK_USAGE_CHARS]; char usage[LOCK_USAGE_CHARS];
if (v == SEQ_START_TOKEN) { if (v == &all_lock_classes) {
seq_printf(m, "all lock classes:\n"); seq_printf(m, "all lock classes:\n");
return 0; return 0;
} }
@ -128,17 +102,7 @@ static const struct seq_operations lockdep_ops = {
static int lockdep_open(struct inode *inode, struct file *file) static int lockdep_open(struct inode *inode, struct file *file)
{ {
int res = seq_open(file, &lockdep_ops); return seq_open(file, &lockdep_ops);
if (!res) {
struct seq_file *m = file->private_data;
if (!list_empty(&all_lock_classes))
m->private = list_entry(all_lock_classes.next,
struct lock_class, lock_entry);
else
m->private = NULL;
}
return res;
} }
static const struct file_operations proc_lockdep_operations = { static const struct file_operations proc_lockdep_operations = {