Commit f75efefb authored by Andreas Gruenbacher's avatar Andreas Gruenbacher
Browse files

gfs2: Clean up glock demote logic



The logic for determining when to demote a glock in glock_work_func(),
introduced in commit 7cf8dcd3 ("GFS2: Automatically adjust glock min
hold time"), doesn't make sense: inode glocks have a minimum hold time
that delays demotion, while all other glocks are expected to be demoted
immediately.  Instead of demoting non-inode glocks immediately,
glock_work_func() schedules glock work for them to be demoted, however.
Get rid of that unnecessary indirection.

Signed-off-by: default avatarAndreas Gruenbacher <agruenba@redhat.com>
parent 5a1906a4
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -1091,11 +1091,13 @@ static void glock_work_func(struct work_struct *work)
	if (test_bit(GLF_PENDING_DEMOTE, &gl->gl_flags) &&
	    gl->gl_state != LM_ST_UNLOCKED &&
	    gl->gl_demote_state != LM_ST_EXCLUSIVE) {
		if (gl->gl_name.ln_type == LM_TYPE_INODE) {
			unsigned long holdtime, now = jiffies;

			holdtime = gl->gl_tchange + gl->gl_hold_time;
			if (time_before(now, holdtime))
				delay = holdtime - now;
		}

		if (!delay) {
			clear_bit(GLF_PENDING_DEMOTE, &gl->gl_flags);
@@ -1106,8 +1108,6 @@ static void glock_work_func(struct work_struct *work)
	if (delay) {
		/* Keep one glock reference for the work we requeue. */
		drop_refs--;
		if (gl->gl_name.ln_type != LM_TYPE_INODE)
			delay = 0;
		gfs2_glock_queue_work(gl, delay);
	}