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
| Srivatsa Vaddagiri | Re: [PATCH, RFC] reimplement flush_workqueue() |
| Greg KH | [GIT PATCH] driver core patches against 2.6.24 |
| debian developer | Re: Dual-Licensing Linux Kernel with GPL V2 and GPL V3 |
| Rafael J. Wysocki | 2.6.26-rc7-git2: Reported regressions from 2.6.25 |
| Alexey Dobriyan | Re: [GIT]: Networking |
| Gerrit Renker | [PATCH 27/37] dccp: Integration of dynamic feature activation - part 2 (server side) |
| David Miller | Re: [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock(). |
| Ilpo Järvinen | Re: [bug] stuck localhost TCP connections, v2.6.26-rc3+ |
git: | |
