diff options
author | Grant Likely <grant.likely@secretlab.ca> | 2011-06-17 18:32:26 +0400 |
---|---|---|
committer | Grant Likely <grant.likely@secretlab.ca> | 2011-06-17 18:32:26 +0400 |
commit | f8db4cc4f2b11bdded6c94f0d55906847474b982 (patch) | |
tree | d1b99d186edb9d203fafd896f19487125a2395af /fs/gfs2/glock.c | |
parent | 2e2de2e314672c8b6644f67a35556d6df780493d (diff) | |
parent | e479c60456ef22b0869432887216186aabaed086 (diff) | |
download | linux-f8db4cc4f2b11bdded6c94f0d55906847474b982.tar.xz |
Merge branch 'spi/merge' into spi/next
Diffstat (limited to 'fs/gfs2/glock.c')
-rw-r--r-- | fs/gfs2/glock.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c index 2792a790e50b..1c1336e7b3b2 100644 --- a/fs/gfs2/glock.c +++ b/fs/gfs2/glock.c @@ -663,14 +663,19 @@ static void glock_work_func(struct work_struct *work) drop_ref = 1; } spin_lock(&gl->gl_spin); - if (test_and_clear_bit(GLF_PENDING_DEMOTE, &gl->gl_flags) && + if (test_bit(GLF_PENDING_DEMOTE, &gl->gl_flags) && gl->gl_state != LM_ST_UNLOCKED && gl->gl_demote_state != LM_ST_EXCLUSIVE) { unsigned long holdtime, now = jiffies; + holdtime = gl->gl_tchange + gl->gl_ops->go_min_hold_time; if (time_before(now, holdtime)) delay = holdtime - now; - set_bit(delay ? GLF_PENDING_DEMOTE : GLF_DEMOTE, &gl->gl_flags); + + if (!delay) { + clear_bit(GLF_PENDING_DEMOTE, &gl->gl_flags); + set_bit(GLF_DEMOTE, &gl->gl_flags); + } } run_queue(gl, 0); spin_unlock(&gl->gl_spin); |