|
@@ -541,21 +541,6 @@ out_locked:
|
|
|
spin_unlock(&gl->gl_spin);
|
|
|
}
|
|
|
|
|
|
-static unsigned int gfs2_lm_lock(struct gfs2_sbd *sdp, void *lock,
|
|
|
- unsigned int req_state,
|
|
|
- unsigned int flags)
|
|
|
-{
|
|
|
- int ret = LM_OUT_ERROR;
|
|
|
-
|
|
|
- if (!sdp->sd_lockstruct.ls_ops->lm_lock)
|
|
|
- return req_state == LM_ST_UNLOCKED ? 0 : req_state;
|
|
|
-
|
|
|
- if (likely(!test_bit(SDF_SHUTDOWN, &sdp->sd_flags)))
|
|
|
- ret = sdp->sd_lockstruct.ls_ops->lm_lock(lock,
|
|
|
- req_state, flags);
|
|
|
- return ret;
|
|
|
-}
|
|
|
-
|
|
|
/**
|
|
|
* do_xmote - Calls the DLM to change the state of a lock
|
|
|
* @gl: The lock state
|
|
@@ -575,8 +560,8 @@ __acquires(&gl->gl_spin)
|
|
|
|
|
|
lck_flags &= (LM_FLAG_TRY | LM_FLAG_TRY_1CB | LM_FLAG_NOEXP |
|
|
|
LM_FLAG_PRIORITY);
|
|
|
- BUG_ON(gl->gl_state == target);
|
|
|
- BUG_ON(gl->gl_state == gl->gl_target);
|
|
|
+ GLOCK_BUG_ON(gl, gl->gl_state == target);
|
|
|
+ GLOCK_BUG_ON(gl, gl->gl_state == gl->gl_target);
|
|
|
if ((target == LM_ST_UNLOCKED || target == LM_ST_DEFERRED) &&
|
|
|
glops->go_inval) {
|
|
|
set_bit(GLF_INVALIDATE_IN_PROGRESS, &gl->gl_flags);
|
|
@@ -594,15 +579,17 @@ __acquires(&gl->gl_spin)
|
|
|
gl->gl_state == LM_ST_DEFERRED) &&
|
|
|
!(lck_flags & (LM_FLAG_TRY | LM_FLAG_TRY_1CB)))
|
|
|
lck_flags |= LM_FLAG_TRY_1CB;
|
|
|
- ret = gfs2_lm_lock(sdp, gl, target, lck_flags);
|
|
|
|
|
|
- if (!(ret & LM_OUT_ASYNC)) {
|
|
|
- finish_xmote(gl, ret);
|
|
|
+ if (sdp->sd_lockstruct.ls_ops->lm_lock) {
|
|
|
+ /* lock_dlm */
|
|
|
+ ret = sdp->sd_lockstruct.ls_ops->lm_lock(gl, target, lck_flags);
|
|
|
+ GLOCK_BUG_ON(gl, ret);
|
|
|
+ } else { /* lock_nolock */
|
|
|
+ finish_xmote(gl, target);
|
|
|
if (queue_delayed_work(glock_workqueue, &gl->gl_work, 0) == 0)
|
|
|
gfs2_glock_put(gl);
|
|
|
- } else {
|
|
|
- GLOCK_BUG_ON(gl, ret != LM_OUT_ASYNC);
|
|
|
}
|
|
|
+
|
|
|
spin_lock(&gl->gl_spin);
|
|
|
}
|
|
|
|