[PATCH 2/5] lock_dep: Fix missing entries in /proc/lock_chains

Li Zefan
2009-08-17T05:41:15Z

Two entries are missing in the output of /proc/lock_chains.

One is chains[1]. When lc_next() is called the 1st time, chains[0] is
returned. And when it's called the 2nd time, chains[2] is returned.

The other missing ons is, when lc_start() is called the 2nd time, we
should start from chains[@pos-1] but not chains[@pos], because pos == 0
is the header.

Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
---
kernel/lockdep_proc.c | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/kernel/lockdep_proc.c b/kernel/lockdep_proc.c
index 0c39f18..84c6b1e 100644
--- a/kernel/lockdep_proc.c
+++ b/kernel/lockdep_proc.c
@@ -160,8 +160,8 @@ static void *lc_next(struct seq_file *m, void *v, loff_t *pos)
else {
chain = v;

- if (*pos < nr_lock_chains)
- chain = lock_chains + *pos;
+ if (*pos - 1 < nr_lock_chains)
+ chain = lock_chains + (*pos - 1);
else
chain = NULL;
}
@@ -174,8 +174,8 @@ static void *lc_start(struct seq_file *m, loff_t *pos)
if (*pos == 0)
return SEQ_START_TOKEN;

- if (*pos < nr_lock_chains)
- return lock_chains + *pos;
+ if (*pos - 1 < nr_lock_chains)
+ return lock_chains + (*pos - 1);

return NULL;
}
--
1.6.3