Revert "gfs2: Don't demote a glock until its revokes are written"
[ Upstream commitb14c94908b
] This reverts commitdf5db5f9ee
. This patch fixes a regression: patchdf5db5f9ee
allowed function run_queue() to bypass its call to do_xmote() if revokes were queued for the glock. That's wrong because its call to do_xmote() is what is responsible for calling the go_sync() glops functions to sync both the ail list and any revokes queued for it. By bypassing the call, gfs2 could get into a stand-off where the glock could not be demoted until its revokes are written back, but the revokes would not be written back because do_xmote() was never called. It "sort of" works, however, because there are other mechanisms like the log flush daemon (logd) that can sync the ail items and revokes, if it deems it necessary. The problem is: without file system pressure, it might never deem it necessary. Signed-off-by: Bob Peterson <rpeterso@redhat.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
bb6524537d
commit
4adb7a2b31
|
@ -639,9 +639,6 @@ __acquires(&gl->gl_lockref.lock)
|
|||
goto out_unlock;
|
||||
if (nonblock)
|
||||
goto out_sched;
|
||||
smp_mb();
|
||||
if (atomic_read(&gl->gl_revokes) != 0)
|
||||
goto out_sched;
|
||||
set_bit(GLF_DEMOTE_IN_PROGRESS, &gl->gl_flags);
|
||||
GLOCK_BUG_ON(gl, gl->gl_demote_state == LM_ST_EXCLUSIVE);
|
||||
gl->gl_target = gl->gl_demote_state;
|
||||
|
|
Loading…
Reference in New Issue