|
@@ -288,6 +288,19 @@ enum dlm_status dlmconvert_remote(struct dlm_ctxt *dlm,
|
|
|
status = DLM_DENIED;
|
|
|
goto bail;
|
|
|
}
|
|
|
+
|
|
|
+ if (lock->ml.type == type && lock->ml.convert_type == LKM_IVMODE) {
|
|
|
+ mlog(0, "last convert request returned DLM_RECOVERING, but "
|
|
|
+ "owner has already queued and sent ast to me. res %.*s, "
|
|
|
+ "(cookie=%u:%llu, type=%d, conv=%d)\n",
|
|
|
+ res->lockname.len, res->lockname.name,
|
|
|
+ dlm_get_lock_cookie_node(be64_to_cpu(lock->ml.cookie)),
|
|
|
+ dlm_get_lock_cookie_seq(be64_to_cpu(lock->ml.cookie)),
|
|
|
+ lock->ml.type, lock->ml.convert_type);
|
|
|
+ status = DLM_NORMAL;
|
|
|
+ goto bail;
|
|
|
+ }
|
|
|
+
|
|
|
res->state |= DLM_LOCK_RES_IN_PROGRESS;
|
|
|
/* move lock to local convert queue */
|
|
|
/* do not alter lock refcount. switching lists. */
|