All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sunil Mushran <sunil.mushran@oracle.com>
To: ocfs2-devel@oss.oracle.com
Subject: [Ocfs2-devel] [PATCH] ocfs2/dlm: remove BUG_ON in a rare case
Date: Wed, 14 Jul 2010 18:37:57 -0700	[thread overview]
Message-ID: <4C3E6675.5070300@oracle.com> (raw)
In-Reply-To: <201007141440.o6EEeWod016015@rcsinet13.oracle.com>

Signed-off-by: Sunil Mushran<sunil.mushran@oracle.com>


On 07/14/2010 07:38 AM, Wengang Wang wrote:
> For migration, we are waiting for DLM_LOCK_RES_MIGRATING flag to be set
> before sending DLM_MIG_LOCKRES_MSG message to the target. We are using
> dlm_migration_can_proceed() for that purpose. while, dlm_migration_can_proceed()
> also returns "go ahead" if target node is down. In this rare case, the
> DLM_LOCK_RES_MIGRATING maybe is not set yet. Remove the BUG_ON() in this case.
>
> Signed-off-by: Wengang Wang<wen.gang.wang@oracle.com>
> ---
>   fs/ocfs2/dlm/dlmmaster.c |   22 ++++++++++++++--------
>   1 files changed, 14 insertions(+), 8 deletions(-)
>
> diff --git a/fs/ocfs2/dlm/dlmmaster.c b/fs/ocfs2/dlm/dlmmaster.c
> index 4a7506a..94b97fc 100644
> --- a/fs/ocfs2/dlm/dlmmaster.c
> +++ b/fs/ocfs2/dlm/dlmmaster.c
> @@ -2808,14 +2808,8 @@ again:
>   		mlog(0, "trying again...\n");
>   		goto again;
>   	}
> -	/* now that we are sure the MIGRATING state is there, drop
> -	 * the unneded state which blocked threads trying to DIRTY */
> -	spin_lock(&res->spinlock);
> -	BUG_ON(!(res->state&  DLM_LOCK_RES_BLOCK_DIRTY));
> -	BUG_ON(!(res->state&  DLM_LOCK_RES_MIGRATING));
> -	res->state&= ~DLM_LOCK_RES_BLOCK_DIRTY;
> -	spin_unlock(&res->spinlock);
>
> +	ret = 0;
>   	/* did the target go down or die? */
>   	spin_lock(&dlm->spinlock);
>   	if (!test_bit(target, dlm->domain_map)) {
> @@ -2826,9 +2820,21 @@ again:
>   	spin_unlock(&dlm->spinlock);
>
>   	/*
> +	 * if target is down, we need to clear DLM_LOCK_RES_BLOCK_DIRTY for
> +	 * another try; otherwise, we are sure the MIGRATING state is there,
> +	 * drop the unneded state which blocked threads trying to DIRTY
> +	 */
> +	spin_lock(&res->spinlock);
> +	BUG_ON(!(res->state&  DLM_LOCK_RES_BLOCK_DIRTY));
> +	res->state&= ~DLM_LOCK_RES_BLOCK_DIRTY;
> +	if (!ret)
> +		BUG_ON(!(res->state&  DLM_LOCK_RES_MIGRATING));
> +	spin_unlock(&res->spinlock);
> +
> +	/*
>   	 * at this point:
>   	 *
> -	 *   o the DLM_LOCK_RES_MIGRATING flag is set
> +	 *   o the DLM_LOCK_RES_MIGRATING flag is set if target not down
>   	 *   o there are no pending asts on this lockres
>   	 *   o all processes trying to reserve an ast on this
>   	 *     lockres must wait for the MIGRATING flag to clear
>    

  reply	other threads:[~2010-07-15  1:37 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-07-14 14:38 [Ocfs2-devel] [PATCH] ocfs2/dlm: remove BUG_ON in a rare case Wengang Wang
2010-07-15  1:37 ` Sunil Mushran [this message]
2010-07-15 21:03 ` Joel Becker

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4C3E6675.5070300@oracle.com \
    --to=sunil.mushran@oracle.com \
    --cc=ocfs2-devel@oss.oracle.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.