|
@@ -220,6 +220,17 @@ static enum dlm_status dlmlock_remote(struct dlm_ctxt *dlm,
|
|
dlm_error(status);
|
|
dlm_error(status);
|
|
dlm_revert_pending_lock(res, lock);
|
|
dlm_revert_pending_lock(res, lock);
|
|
dlm_lock_put(lock);
|
|
dlm_lock_put(lock);
|
|
|
|
+ } else if (dlm_is_recovery_lock(res->lockname.name,
|
|
|
|
+ res->lockname.len)) {
|
|
|
|
+ /* special case for the $RECOVERY lock.
|
|
|
|
+ * there will never be an AST delivered to put
|
|
|
|
+ * this lock on the proper secondary queue
|
|
|
|
+ * (granted), so do it manually. */
|
|
|
|
+ mlog(0, "%s: $RECOVERY lock for this node (%u) is "
|
|
|
|
+ "mastered by %u; got lock, manually granting (no ast)\n",
|
|
|
|
+ dlm->name, dlm->node_num, res->owner);
|
|
|
|
+ list_del_init(&lock->list);
|
|
|
|
+ list_add_tail(&lock->list, &res->granted);
|
|
}
|
|
}
|
|
spin_unlock(&res->spinlock);
|
|
spin_unlock(&res->spinlock);
|
|
|
|
|