From 627add2d1385394d020c84533c91ad26bc37b166 Mon Sep 17 00:00:00 2001
From: Steven Whitehouse <swhiteho@redhat.com>
Date: Wed, 5 Jul 2006 13:16:19 -0400
Subject: [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>
---
 fs/gfs2/glock.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

(limited to 'fs/gfs2/glock.c')

diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c
index dbeb4ad..7f362d0 100644
--- a/fs/gfs2/glock.c
+++ b/fs/gfs2/glock.c
@@ -1967,8 +1967,11 @@ static void scan_glock(struct gfs2_glock *gl)
 	if (gfs2_glmutex_trylock(gl)) {
 		if (gl->gl_ops == &gfs2_inode_glops) {
 			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;
+			}
 		}
 		if (queue_empty(gl, &gl->gl_holders) &&
 		    gl->gl_state != LM_ST_UNLOCKED &&
@@ -1982,7 +1985,7 @@ static void scan_glock(struct gfs2_glock *gl)
 
 	return;
 
- out_schedule:
+out_schedule:
 	gfs2_glmutex_unlock(gl);
 	gfs2_glock_schedule_for_reclaim(gl);
 	gfs2_glock_put(gl);
-- 
cgit v1.1