On Tue, 2007-10-09 at 02:30 +0100, Al Viro wrote:a not le. FWIW I had to do Tim's bits too. Just moving all output from the start into the show method didn't fix it. Signed-off-by: Tim Pepper <lnxninja@linux.vnet.ibm.com> Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> --- kernel/lockdep_proc.c | 69 +++++++++++++++++++++++----------------------= ----- 1 file changed, 33 insertions(+), 36 deletions(-) Index: linux-2.6/kernel/lockdep_proc.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- linux-2.6.orig/kernel/lockdep_proc.c +++ linux-2.6/kernel/lockdep_proc.c @@ -23,32 +23,25 @@ =20 #include "lockdep_internals.h" =20 -static void *l_next(struct seq_file *m, void *v, loff_t *pos) +static void *l_start(struct seq_file *m, loff_t *pos) { - struct lock_class *class =3D v; - - (*pos)++; - - if (class->lock_entry.next !=3D &all_lock_classes) - class =3D list_entry(class->lock_entry.next, struct lock_class, - lock_entry); - else - class =3D NULL; - m->private =3D class; + struct lock_class *class; + int i =3D 0; =20 - return class; + list_for_each_entry(class, &all_lock_classes, lock_entry) { + if (i++ =3D=3D *pos) + return class; + } + return NULL; } =20 -static void *l_start(struct seq_file *m, loff_t *pos) +static void *l_next(struct seq_file *m, void *v, loff_t *pos) { - struct lock_class *class =3D m->private; - - if (&class->lock_entry =3D=3D all_lock_classes.next) - seq_printf(m, "all lock classes:\n"); - - return class; + (*pos)++; + return l_start(m, pos); } =20 + static void l_stop(struct seq_file *m, void *v) { } @@ -101,10 +94,16 @@ static void print_name(struct seq_file * static int l_show(struct seq_file *m, void *v) { unsigned long nr_forward_deps, nr_backward_deps; - struct lock_class *class =3D m->private; + struct lock_class *class =3D v; struct lock_list *entry; char c1, c2, c3, c4; =20 + if (WARN_ON(class =3D=3D NULL)) + return 0; + + if (&class->lock_entry =3D=3D all_lock_classes.next) + seq_printf(m, "all lock classes:\n"); + seq_printf(m, "%p", class->key); #ifdef CONFIG_DEBUG_LOCKDEP seq_printf(m, " OPS:%8ld", class->ops); @@ -522,28 +521,19 @@ static void seq_header(struct seq_file * static void *ls_start(struct seq_file *m, loff_t *pos) { struct lock_stat_seq *data =3D m->private; + struct lock_stat_data *iter; =20 - if (data->iter =3D=3D data->stats) - seq_header(m); - - if (data->iter =3D=3D data->iter_end) - data->iter =3D NULL; + iter =3D data->iter + *pos; + if (iter >=3D data->iter_end) + iter =3D NULL; =20 - return data->iter; + return iter; } =20 static void *ls_next(struct seq_file *m, void *v, loff_t *pos) { - struct lock_stat_seq *data =3D m->private; - (*pos)++; - - data->iter =3D v; - data->iter++; - if (data->iter =3D=3D data->iter_end) - data->iter =3D NULL; - - return data->iter; + return ls_start(m, pos); } =20 static void ls_stop(struct seq_file *m, void *v) @@ -553,8 +543,15 @@ static void ls_stop(struct seq_file *m,=20 static int ls_show(struct seq_file *m, void *v) { struct lock_stat_seq *data =3D m->private; + struct lock_stat_data *iter =3D v; + + if (WARN_ON(iter =3D=3D NULL)) + return 0; + + if (iter =3D=3D data->iter) + seq_header(m); =20 - seq_stats(m, data->iter); + seq_stats(m, iter); return 0; } =20
| Thomas Gleixner | Re: Linux 2.6.21-rc1 |
| Tarkan Erimer | Re: Dual-Licensing Linux Kernel with GPL V2 and GPL V3 |
| James Bottomley | [Ksummit-2008-discuss] Fixing the Kernel Janitors project |
| James Morris | Re: LSM conversion to static interface |
git: | |
| Natalie Protasevich | [BUG] New Kernel Bugs |
| Christoph Hellwig | Re: [PATCH 06/32] IGET: Mark iget() and read_inode() as being obsolete [try #2] |
| Linus Torvalds | Re: [GIT]: Networking |
| Jarek Poplawski | [PATCH take 2] pkt_sched: Protect gen estimators under est_lock. |
