Linux ocfs2 filesystem development
 help / color / mirror / Atom feed
From: Joseph Qi <joseph.qi@huawei.com>
To: ocfs2-devel@oss.oracle.com
Subject: [Ocfs2-devel] [PATCH] ocfs2: oldmle should be put while -EEXIST returned, and the new mle should not be get once at that time.
Date: Wed, 14 Sep 2016 10:54:13 +0800	[thread overview]
Message-ID: <57D8BBD5.6000408@huawei.com> (raw)
In-Reply-To: <71604351584F6A4EBAE558C676F37CA4A3D35566@H3CMLB12-EX.srv.huawei-3com.com>

NAK. This has already been fixed by commit 32e493265b2b ("ocfs2/dlm:
do not insert a new mle when another process is already migrating").
Please submit patch based on the latest kernel.

Thanks,
Joseph

On 2016/9/14 10:30, Guozhonghua wrote:
> 
> In the function dlm_migrate_lockres, while calling dlm_add_migration_mle, and the ret is --EEXIST.
> At this time, the oldmle should be put one time for it had been get once in dlm_find_mle.
> And the new mle should not get once for it had not been initialized before goto fail.
> 
> Signed-off-by: Guozhonghua <guozhonghua@h3c.com>
> 
> --- ocfs2.orig/dlm/dlmmaster.c  2016-09-13 15:18:13.602684325 +0800
> +++ ocfs2/dlm/dlmmaster.c       2016-09-14 10:15:10.496873879 +0800
> @@ -2573,8 +2573,6 @@ static int dlm_is_lockres_migrateable(st
>  /*
>   * DLM_MIGRATE_LOCKRES
>   */
> -
> -
>  static int dlm_migrate_lockres(struct dlm_ctxt *dlm,
>                                struct dlm_lock_resource *res, u8 target)
>  {
> @@ -2621,20 +2619,26 @@ static int dlm_migrate_lockres(struct dl
>         spin_lock(&dlm->master_lock);
>         ret = dlm_add_migration_mle(dlm, res, mle, &oldmle, name,
>                                     namelen, target, dlm->node_num);
> +       if (ret == -EEXIST) {
> +               if(oldmle)
> +                       __dlm_put_mle(oldmle);
> +
> +               spin_unlock(&dlm->master_lock);
> +               spin_unlock(&dlm->spinlock);
> +               mlog(0, "another process is already migrating it\n");
> +               goto fail;
> +       }
> +
>         /* get an extra reference on the mle.
>          * otherwise the assert_master from the new
>          * master will destroy this.
>          */
>         dlm_get_mle_inuse(mle);
> +       mle_added = 1;
> +
>         spin_unlock(&dlm->master_lock);
>         spin_unlock(&dlm->spinlock);
> 
> -       if (ret == -EEXIST) {
> -               mlog(0, "another process is already migrating it\n");
> -               goto fail;
> -       }
> -       mle_added = 1;
> -
>         /*
>          * set the MIGRATING flag and flush asts
>          * if we fail after this we need to re-dirty the lockres
> 
> -------------------------------------------------------------------------------------------------------------------------------------
> ????????????????????????????????????????
> ????????????????????????????????????????
> ????????????????????????????????????????
> ???
> This e-mail and its attachments contain confidential information from H3C, which is
> intended only for the person or entity whose address is listed above. Any use of the
> information contained herein in any way (including, but not limited to, total or partial
> disclosure, reproduction, or dissemination) by persons other than the intended
> recipient(s) is prohibited. If you receive this e-mail in error, please notify the sender
> by phone or email immediately and delete it!
> _______________________________________________
> Ocfs2-devel mailing list
> Ocfs2-devel at oss.oracle.com
> https://oss.oracle.com/mailman/listinfo/ocfs2-devel
> 

  reply	other threads:[~2016-09-14  2:54 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-09-14  2:30 [Ocfs2-devel] [PATCH] ocfs2: oldmle should be put while -EEXIST returned, and the new mle should not be get once at that time Guozhonghua
2016-09-14  2:54 ` Joseph Qi [this message]
2016-09-14  3:41   ` [Ocfs2-devel] 答复: " Guozhonghua

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=57D8BBD5.6000408@huawei.com \
    --to=joseph.qi@huawei.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox