Commit aa852354 authored by Kurt Hackel's avatar Kurt Hackel Committed by Mark Fasheh

ocfs2: mle ref count debugging

Signed-off-by: default avatarKurt Hackel <kurt.hackel@oracle.com>
Signed-off-by: default avatarMark Fasheh <mark.fasheh@oracle.com>
parent dc2ed195
...@@ -371,9 +371,14 @@ static void __dlm_put_mle(struct dlm_master_list_entry *mle) ...@@ -371,9 +371,14 @@ static void __dlm_put_mle(struct dlm_master_list_entry *mle)
assert_spin_locked(&dlm->spinlock); assert_spin_locked(&dlm->spinlock);
assert_spin_locked(&dlm->master_lock); assert_spin_locked(&dlm->master_lock);
BUG_ON(!atomic_read(&mle->mle_refs.refcount)); if (!atomic_read(&mle->mle_refs.refcount)) {
/* this may or may not crash, but who cares.
kref_put(&mle->mle_refs, dlm_mle_release); * it's a BUG. */
mlog(ML_ERROR, "bad mle: %p\n", mle);
dlm_print_one_mle(mle);
BUG();
} else
kref_put(&mle->mle_refs, dlm_mle_release);
} }
...@@ -1008,6 +1013,12 @@ static int dlm_wait_for_lock_mastery(struct dlm_ctxt *dlm, ...@@ -1008,6 +1013,12 @@ static int dlm_wait_for_lock_mastery(struct dlm_ctxt *dlm,
"rechecking now\n", dlm->name, res->lockname.len, "rechecking now\n", dlm->name, res->lockname.len,
res->lockname.name); res->lockname.name);
goto recheck; goto recheck;
} else {
if (!voting_done) {
mlog(0, "map not changed and voting not done "
"for %s:%.*s\n", dlm->name, res->lockname.len,
res->lockname.name);
}
} }
if (m != O2NM_MAX_NODES) { if (m != O2NM_MAX_NODES) {
...@@ -1691,7 +1702,7 @@ int dlm_assert_master_handler(struct o2net_msg *msg, u32 len, void *data) ...@@ -1691,7 +1702,7 @@ int dlm_assert_master_handler(struct o2net_msg *msg, u32 len, void *data)
if (bit >= O2NM_MAX_NODES) { if (bit >= O2NM_MAX_NODES) {
/* not necessarily an error, though less likely. /* not necessarily an error, though less likely.
* could be master just re-asserting. */ * could be master just re-asserting. */
mlog(ML_ERROR, "no bits set in the maybe_map, but %u " mlog(0, "no bits set in the maybe_map, but %u "
"is asserting! (%.*s)\n", assert->node_idx, "is asserting! (%.*s)\n", assert->node_idx,
namelen, name); namelen, name);
} else if (bit != assert->node_idx) { } else if (bit != assert->node_idx) {
...@@ -1703,7 +1714,7 @@ int dlm_assert_master_handler(struct o2net_msg *msg, u32 len, void *data) ...@@ -1703,7 +1714,7 @@ int dlm_assert_master_handler(struct o2net_msg *msg, u32 len, void *data)
* number winning the mastery will respond * number winning the mastery will respond
* YES to mastery requests, but this node * YES to mastery requests, but this node
* had no way of knowing. let it pass. */ * had no way of knowing. let it pass. */
mlog(ML_ERROR, "%u is the lowest node, " mlog(0, "%u is the lowest node, "
"%u is asserting. (%.*s) %u must " "%u is asserting. (%.*s) %u must "
"have begun after %u won.\n", bit, "have begun after %u won.\n", bit,
assert->node_idx, namelen, name, bit, assert->node_idx, namelen, name, bit,
...@@ -2268,8 +2279,8 @@ int dlm_migrate_lockres(struct dlm_ctxt *dlm, struct dlm_lock_resource *res, ...@@ -2268,8 +2279,8 @@ int dlm_migrate_lockres(struct dlm_ctxt *dlm, struct dlm_lock_resource *res,
/* avoid hang during shutdown when migrating lockres /* avoid hang during shutdown when migrating lockres
* to a node which also goes down */ * to a node which also goes down */
if (dlm_is_node_dead(dlm, target)) { if (dlm_is_node_dead(dlm, target)) {
mlog(0, "%s:%.*s: expected migration target %u " mlog(0, "%s:%.*s: expected migration "
"is no longer up. restarting.\n", "target %u is no longer up, restarting\n",
dlm->name, res->lockname.len, dlm->name, res->lockname.len,
res->lockname.name, target); res->lockname.name, target);
ret = -ERESTARTSYS; ret = -ERESTARTSYS;
...@@ -2790,8 +2801,8 @@ void dlm_clean_master_list(struct dlm_ctxt *dlm, u8 dead_node) ...@@ -2790,8 +2801,8 @@ void dlm_clean_master_list(struct dlm_ctxt *dlm, u8 dead_node)
spin_unlock(&mle->spinlock); spin_unlock(&mle->spinlock);
wake_up(&mle->wq); wake_up(&mle->wq);
mlog(0, "node %u died during migration from " mlog(0, "%s: node %u died during migration from "
"%u to %u!\n", dead_node, "%u to %u!\n", dlm->name, dead_node,
mle->master, mle->new_master); mle->master, mle->new_master);
/* if there is a lockres associated with this /* if there is a lockres associated with this
* mle, find it and set its owner to UNKNOWN */ * mle, find it and set its owner to UNKNOWN */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment