[Ocfs2-devel] [PATCH 3/4] ocfs2/dlm: Print more messages during lock migration
Joel Becker
Joel.Becker at oracle.com
Mon Jan 25 19:53:29 PST 2010
On Mon, Jan 25, 2010 at 04:57:40PM -0800, Sunil Mushran wrote:
> When a lock resource is migrated, the dlm compares the migrated
> locks with that that was already existing on the new node. If the
> comparison fails, it BUGs. This patch prints more messages when the
> comparison fails inorder to help with the root cause analyis.
>
> http://oss.oracle.com/bugzilla/show_bug.cgi?id=1206
> This does not fix bz1206. However, if we run into it again, we will
> have more information to chew on.
>
> Signed-off-by: Sunil Mushran <sunil.mushran at oracle.com>
This patch is now part of the 'fixes' branch of ocfs2.git.
Joel
> ---
> fs/ocfs2/dlm/dlmrecovery.c | 46 ++++++++++++++++++++++++++++++++++++-------
> 1 files changed, 38 insertions(+), 8 deletions(-)
>
> diff --git a/fs/ocfs2/dlm/dlmrecovery.c b/fs/ocfs2/dlm/dlmrecovery.c
> index 9d67894..cfb2ae9 100644
> --- a/fs/ocfs2/dlm/dlmrecovery.c
> +++ b/fs/ocfs2/dlm/dlmrecovery.c
> @@ -1750,6 +1750,7 @@ static int dlm_process_recovery_data(struct dlm_ctxt *dlm,
> struct dlm_lock *lock = NULL;
> u8 from = O2NM_MAX_NODES;
> unsigned int added = 0;
> + __be64 c;
>
> mlog(0, "running %d locks for this lockres\n", mres->num_locks);
> for (i=0; i<mres->num_locks; i++) {
> @@ -1797,19 +1798,48 @@ static int dlm_process_recovery_data(struct dlm_ctxt *dlm,
> /* lock is always created locally first, and
> * destroyed locally last. it must be on the list */
> if (!lock) {
> - __be64 c = ml->cookie;
> - mlog(ML_ERROR, "could not find local lock "
> - "with cookie %u:%llu!\n",
> + c = ml->cookie;
> + mlog(ML_ERROR, "Could not find local lock "
> + "with cookie %u:%llu, node %u, "
> + "list %u, flags 0x%x, type %d, "
> + "conv %d, highest blocked %d\n",
> dlm_get_lock_cookie_node(be64_to_cpu(c)),
> - dlm_get_lock_cookie_seq(be64_to_cpu(c)));
> + dlm_get_lock_cookie_seq(be64_to_cpu(c)),
> + ml->node, ml->list, ml->flags, ml->type,
> + ml->convert_type, ml->highest_blocked);
> + __dlm_print_one_lock_resource(res);
> + BUG();
> + }
> +
> + if (lock->ml.node != ml->node) {
> + c = lock->ml.cookie;
> + mlog(ML_ERROR, "Mismatched node# in lock "
> + "cookie %u:%llu, name %.*s, node %u\n",
> + dlm_get_lock_cookie_node(be64_to_cpu(c)),
> + dlm_get_lock_cookie_seq(be64_to_cpu(c)),
> + res->lockname.len, res->lockname.name,
> + lock->ml.node);
> + c = ml->cookie;
> + mlog(ML_ERROR, "Migrate lock cookie %u:%llu, "
> + "node %u, list %u, flags 0x%x, type %d, "
> + "conv %d, highest blocked %d\n",
> + dlm_get_lock_cookie_node(be64_to_cpu(c)),
> + dlm_get_lock_cookie_seq(be64_to_cpu(c)),
> + ml->node, ml->list, ml->flags, ml->type,
> + ml->convert_type, ml->highest_blocked);
> __dlm_print_one_lock_resource(res);
> BUG();
> }
> - BUG_ON(lock->ml.node != ml->node);
>
> if (tmpq != queue) {
> - mlog(0, "lock was on %u instead of %u for %.*s\n",
> - j, ml->list, res->lockname.len, res->lockname.name);
> + c = ml->cookie;
> + mlog(0, "Lock cookie %u:%llu was on list %u "
> + "instead of list %u for %.*s\n",
> + dlm_get_lock_cookie_node(be64_to_cpu(c)),
> + dlm_get_lock_cookie_seq(be64_to_cpu(c)),
> + j, ml->list, res->lockname.len,
> + res->lockname.name);
> + __dlm_print_one_lock_resource(res);
> spin_unlock(&res->spinlock);
> continue;
> }
> @@ -1906,7 +1936,7 @@ skip_lvb:
> spin_lock(&res->spinlock);
> list_for_each_entry(lock, queue, list) {
> if (lock->ml.cookie == ml->cookie) {
> - __be64 c = lock->ml.cookie;
> + c = lock->ml.cookie;
> mlog(ML_ERROR, "%s:%.*s: %u:%llu: lock already "
> "exists on this lockres!\n", dlm->name,
> res->lockname.len, res->lockname.name,
> --
> 1.5.6.5
>
--
"Under capitalism, man exploits man. Under Communism, it's just
the opposite."
- John Kenneth Galbraith
Joel Becker
Principal Software Developer
Oracle
E-mail: joel.becker at oracle.com
Phone: (650) 506-8127
More information about the Ocfs2-devel
mailing list