ocfs2/dlm: force clean refmap when doing local cleanup
[platform/adaptation/renesas_rcar/renesas_kernel.git] / fs / ocfs2 / dlm / dlmrecovery.c
index f945502..0b5adca 100644 (file)
@@ -2331,6 +2331,14 @@ static void dlm_do_local_recovery_cleanup(struct dlm_ctxt *dlm, u8 dead_node)
                        } else if (res->owner == dlm->node_num) {
                                dlm_free_dead_locks(dlm, res, dead_node);
                                __dlm_lockres_calc_usage(dlm, res);
+                       } else if (res->owner == DLM_LOCK_RES_OWNER_UNKNOWN) {
+                               if (test_bit(dead_node, res->refmap)) {
+                                       mlog(0, "%s:%.*s: dead node %u had a ref, but had "
+                                               "no locks and had not purged before dying\n",
+                                               dlm->name, res->lockname.len,
+                                               res->lockname.name, dead_node);
+                                       dlm_lockres_clear_refmap_bit(dlm, res, dead_node);
+                               }
                        }
                        spin_unlock(&res->spinlock);
                }