[GFS2] Correct logic in glock scanner

Under certain circumstances the glock scanning logic would
demote locks which ought not to have been selected for
demotion.

Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
This commit is contained in:
Steven Whitehouse 2006-07-05 13:16:19 -04:00
parent fd4de2d41a
commit 627add2d13
1 changed files with 5 additions and 2 deletions

View File

@ -1967,9 +1967,12 @@ static void scan_glock(struct gfs2_glock *gl)
if (gfs2_glmutex_trylock(gl)) { if (gfs2_glmutex_trylock(gl)) {
if (gl->gl_ops == &gfs2_inode_glops) { if (gl->gl_ops == &gfs2_inode_glops) {
struct gfs2_inode *ip = gl->gl_object; struct gfs2_inode *ip = gl->gl_object;
if (ip) if (ip == NULL) {
struct gfs2_sbd *sdp = gl->gl_sbd;
gfs2_assert_withdraw(sdp, gl->gl_state == LM_ST_UNLOCKED);
goto out_schedule; goto out_schedule;
} }
}
if (queue_empty(gl, &gl->gl_holders) && if (queue_empty(gl, &gl->gl_holders) &&
gl->gl_state != LM_ST_UNLOCKED && gl->gl_state != LM_ST_UNLOCKED &&
demote_ok(gl)) demote_ok(gl))