mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-29 22:02:02 +00:00
gfs2: Fix "ignore unlock failures after withdraw"
[ Upstream commit5d92311119
] Commit3e11e53041
tries to suppress dlm_lock() lock conversion errors that occur when the lockspace has already been released. It does that by setting and checking the SDF_SKIP_DLM_UNLOCK flag. This conflicts with the intended meaning of the SDF_SKIP_DLM_UNLOCK flag, so check whether the lockspace is still allocated instead. (Given the current DLM API, checking for this kind of error after the fact seems easier that than to make sure that the lockspace is still allocated before calling dlm_lock(). Changing the DLM API so that users maintain the lockspace references themselves would be an option.) Fixes:3e11e53041
("GFS2: ignore unlock failures after withdraw") Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
4b10a59fb6
commit
15b1f35a11
2 changed files with 3 additions and 2 deletions
|
@ -855,11 +855,13 @@ __acquires(&gl->gl_lockref.lock)
|
|||
}
|
||||
|
||||
if (sdp->sd_lockstruct.ls_ops->lm_lock) {
|
||||
struct lm_lockstruct *ls = &sdp->sd_lockstruct;
|
||||
|
||||
/* lock_dlm */
|
||||
ret = sdp->sd_lockstruct.ls_ops->lm_lock(gl, target, lck_flags);
|
||||
if (ret == -EINVAL && gl->gl_target == LM_ST_UNLOCKED &&
|
||||
target == LM_ST_UNLOCKED &&
|
||||
test_bit(SDF_SKIP_DLM_UNLOCK, &sdp->sd_flags)) {
|
||||
test_bit(DFL_UNMOUNT, &ls->ls_recover_flags)) {
|
||||
finish_xmote(gl, target);
|
||||
gfs2_glock_queue_work(gl, 0);
|
||||
} else if (ret) {
|
||||
|
|
|
@ -359,7 +359,6 @@ int gfs2_withdraw(struct gfs2_sbd *sdp)
|
|||
fs_err(sdp, "telling LM to unmount\n");
|
||||
lm->lm_unmount(sdp);
|
||||
}
|
||||
set_bit(SDF_SKIP_DLM_UNLOCK, &sdp->sd_flags);
|
||||
fs_err(sdp, "File system withdrawn\n");
|
||||
dump_stack();
|
||||
clear_bit(SDF_WITHDRAW_IN_PROG, &sdp->sd_flags);
|
||||
|
|
Loading…
Reference in a new issue