]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - fs/ocfs2/dlm/dlmrecovery.c
Merge branch 'uc-logic' into for-linus
[karo-tx-linux.git] / fs / ocfs2 / dlm / dlmrecovery.c
index 9dfaac73b36da4350cc5a2f2dc7a34918a21e11e..aaaffbcbe9163f0ea7376301bc854d85a0bd5b66 100644 (file)
@@ -1997,6 +1997,8 @@ void dlm_move_lockres_to_recovery_list(struct dlm_ctxt *dlm,
        struct list_head *queue;
        struct dlm_lock *lock, *next;
 
+       assert_spin_locked(&dlm->spinlock);
+       assert_spin_locked(&res->spinlock);
        res->state |= DLM_LOCK_RES_RECOVERING;
        if (!list_empty(&res->recovering)) {
                mlog(0,
@@ -2326,19 +2328,15 @@ static void dlm_do_local_recovery_cleanup(struct dlm_ctxt *dlm, u8 dead_node)
                        /* zero the lvb if necessary */
                        dlm_revalidate_lvb(dlm, res, dead_node);
                        if (res->owner == dead_node) {
-                               if (res->state & DLM_LOCK_RES_DROPPING_REF)
-                                       mlog(0, "%s:%.*s: owned by "
-                                            "dead node %u, this node was "
-                                            "dropping its ref when it died. "
-                                            "continue, dropping the flag.\n",
-                                            dlm->name, res->lockname.len,
-                                            res->lockname.name, dead_node);
-
-                               /* the wake_up for this will happen when the
-                                * RECOVERING flag is dropped later */
-                               res->state &= ~DLM_LOCK_RES_DROPPING_REF;
+                               if (res->state & DLM_LOCK_RES_DROPPING_REF) {
+                                       mlog(ML_NOTICE, "Ignore %.*s for "
+                                            "recovery as it is being freed\n",
+                                            res->lockname.len,
+                                            res->lockname.name);
+                               } else
+                                       dlm_move_lockres_to_recovery_list(dlm,
+                                                                         res);
 
-                               dlm_move_lockres_to_recovery_list(dlm, res);
                        } else if (res->owner == dlm->node_num) {
                                dlm_free_dead_locks(dlm, res, dead_node);
                                __dlm_lockres_calc_usage(dlm, res);