aboutsummaryrefslogtreecommitdiff
path: root/fs/gfs2
diff options
context:
space:
mode:
authorGravatar Steven Whitehouse <swhiteho@redhat.com> 2008-07-22 22:58:03 +0100
committerGravatar Steven Whitehouse <swhiteho@redhat.com> 2008-08-13 09:59:10 +0100
commitc1e817d03a7de57a963654c35e6e80af9a5dbff5 (patch)
treee90926cce9311091b31ea60fbf35dc11c9d18a3f /fs/gfs2
parentLinux 2.6.27-rc3 (diff)
downloadlinux-c1e817d03a7de57a963654c35e6e80af9a5dbff5.tar.gz
linux-c1e817d03a7de57a963654c35e6e80af9a5dbff5.tar.bz2
linux-c1e817d03a7de57a963654c35e6e80af9a5dbff5.zip
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>
Diffstat (limited to 'fs/gfs2')
-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 13391e546616..4cbb6957a0d4 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)