diff options
author | Grant Likely <grant.likely@secretlab.ca> | 2011-06-15 14:57:39 -0600 |
---|---|---|
committer | Grant Likely <grant.likely@secretlab.ca> | 2011-06-15 14:57:39 -0600 |
commit | 2bc7c85210d75b7a8a7326284b4f608a16f52ffc (patch) | |
tree | ca306d89f64ceeee92531cc0a9ba5d246d09f044 /fs/gfs2/glock.c | |
parent | 12610be33df5563d3f8cb141f231d4dc5b2a317f (diff) | |
parent | df2212270ce94f12e9caed6ca04c7077672d588e (diff) |
Merge branch 'gpio/next-tegra' into gpio/next
Conflicts:
drivers/gpio/Kconfig
drivers/gpio/Makefile
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 2792a790e50..1c1336e7b3b 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); |