aboutsummaryrefslogtreecommitdiffstats
path: root/fs/gfs2/glock.c
diff options
context:
space:
mode:
authorSteven Whitehouse <swhiteho@redhat.com>2006-07-06 17:58:03 -0400
committerSteven Whitehouse <swhiteho@redhat.com>2006-07-06 17:58:03 -0400
commit29937ac6caa68d60c7f1a3e07b6137cf53e09e24 (patch)
treeace90d235f2ee44926885efeab8d6fe9761427f8 /fs/gfs2/glock.c
parent71ec63c5d66b577a71910b82740751be73e81310 (diff)
[GFS2] Fixes to scanning of glocks (again)
This really is the correct fix this time. We just ignore all glocks associated with inodes until the inodes are pushed from the inode cache. At that point the glocks are queued for reclaim, so we don't need to do it here. Also fix one or two other minor bugs. Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Diffstat (limited to 'fs/gfs2/glock.c')
-rw-r--r--fs/gfs2/glock.c12
1 files changed, 3 insertions, 9 deletions
diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c
index 7f362d0c3f7a..0381d4cc4146 100644
--- a/fs/gfs2/glock.c
+++ b/fs/gfs2/glock.c
@@ -1965,19 +1965,13 @@ static int examine_bucket(glock_examiner examiner, struct gfs2_sbd *sdp,
1965static void scan_glock(struct gfs2_glock *gl) 1965static void scan_glock(struct gfs2_glock *gl)
1966{ 1966{
1967 if (gfs2_glmutex_trylock(gl)) { 1967 if (gfs2_glmutex_trylock(gl)) {
1968 if (gl->gl_ops == &gfs2_inode_glops) { 1968 if (gl->gl_ops == &gfs2_inode_glops)
1969 struct gfs2_inode *ip = gl->gl_object; 1969 goto out;
1970 if (ip == NULL) {
1971 struct gfs2_sbd *sdp = gl->gl_sbd;
1972 gfs2_assert_withdraw(sdp, gl->gl_state == LM_ST_UNLOCKED);
1973 goto out_schedule;
1974 }
1975 }
1976 if (queue_empty(gl, &gl->gl_holders) && 1970 if (queue_empty(gl, &gl->gl_holders) &&
1977 gl->gl_state != LM_ST_UNLOCKED && 1971 gl->gl_state != LM_ST_UNLOCKED &&
1978 demote_ok(gl)) 1972 demote_ok(gl))
1979 goto out_schedule; 1973 goto out_schedule;
1980 1974out:
1981 gfs2_glmutex_unlock(gl); 1975 gfs2_glmutex_unlock(gl);
1982 } 1976 }
1983 1977