diff options
author | Steven Whitehouse <swhiteho@redhat.com> | 2008-07-22 22:58:03 +0100 |
---|---|---|
committer | Steven Whitehouse <swhiteho@redhat.com> | 2008-08-13 09:59:10 +0100 |
commit | c1e817d03a7de57a963654c35e6e80af9a5dbff5 (patch) | |
tree | e90926cce9311091b31ea60fbf35dc11c9d18a3f /fs/gfs2 | |
parent | 30a2f3c60a84092c8084dfe788b710f8d0768cd4 (diff) | |
download | op-kernel-dev-c1e817d03a7de57a963654c35e6e80af9a5dbff5.zip op-kernel-dev-c1e817d03a7de57a963654c35e6e80af9a5dbff5.tar.gz |
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.c | 11 |
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) |