dlm_error(status);
                dlm_revert_pending_lock(res, 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);