aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Whitehouse <swhiteho@redhat.com>2008-07-22 22:58:03 +0100
committerSteven Whitehouse <swhiteho@redhat.com>2008-08-13 09:59:10 +0100
commitc1e817d03a7de57a963654c35e6e80af9a5dbff5 (patch)
treee90926cce9311091b31ea60fbf35dc11c9d18a3f
parent30a2f3c60a84092c8084dfe788b710f8d0768cd4 (diff)
downloadkernel_samsung_tuna-c1e817d03a7de57a963654c35e6e80af9a5dbff5.zip
kernel_samsung_tuna-c1e817d03a7de57a963654c35e6e80af9a5dbff5.tar.gz
kernel_samsung_tuna-c1e817d03a7de57a963654c35e6e80af9a5dbff5.tar.bz2
GFS2: Fix debugfs glock file iterator
Due to an incorrect iterator, some glocks were being missed from the glock dumps obtained via debugfs. This patch fixes the problem and ensures that we don't miss any glocks in future. Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
-rw-r--r--fs/gfs2/glock.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c
index 13391e5..4cbb695 100644
--- a/fs/gfs2/glock.c
+++ b/fs/gfs2/glock.c
@@ -1816,15 +1816,17 @@ restart:
if (gl) {
gi->gl = hlist_entry(gl->gl_list.next,
struct gfs2_glock, gl_list);
- if (gi->gl)
- gfs2_glock_hold(gi->gl);
+ } else {
+ gi->gl = hlist_entry(gl_hash_table[gi->hash].hb_list.first,
+ struct gfs2_glock, gl_list);
}
+ if (gi->gl)
+ gfs2_glock_hold(gi->gl);
read_unlock(gl_lock_addr(gi->hash));
if (gl)
gfs2_glock_put(gl);
- if (gl && gi->gl == NULL)
- gi->hash++;
while (gi->gl == NULL) {
+ gi->hash++;
if (gi->hash >= GFS2_GL_HASH_SIZE)
return 1;
read_lock(gl_lock_addr(gi->hash));
@@ -1833,7 +1835,6 @@ restart:
if (gi->gl)
gfs2_glock_hold(gi->gl);
read_unlock(gl_lock_addr(gi->hash));
- gi->hash++;
}
if (gi->sdp != gi->gl->gl_sbd)