|
|
@@ -475,7 +475,14 @@ __acquires(&gl->gl_lockref.lock)
|
|
|
if (sdp->sd_lockstruct.ls_ops->lm_lock) {
|
|
|
/* lock_dlm */
|
|
|
ret = sdp->sd_lockstruct.ls_ops->lm_lock(gl, target, lck_flags);
|
|
|
- if (ret) {
|
|
|
+ if (ret == -EINVAL && gl->gl_target == LM_ST_UNLOCKED &&
|
|
|
+ target == LM_ST_UNLOCKED &&
|
|
|
+ test_bit(SDF_SKIP_DLM_UNLOCK, &sdp->sd_flags)) {
|
|
|
+ finish_xmote(gl, target);
|
|
|
+ if (queue_delayed_work(glock_workqueue, &gl->gl_work, 0) == 0)
|
|
|
+ gfs2_glock_put(gl);
|
|
|
+ }
|
|
|
+ else if (ret) {
|
|
|
pr_err("lm_lock ret %d\n", ret);
|
|
|
GLOCK_BUG_ON(gl, 1);
|
|
|
}
|