Signed-off-by: Sunil Mushran<[email protected]>

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<[email protected]>
> ---
>   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
>    


_______________________________________________
Ocfs2-devel mailing list
[email protected]
http://oss.oracle.com/mailman/listinfo/ocfs2-devel

Reply via email to