[Ocfs2-devel] [PATCH] ocfs2: oldmle should be put while -EEXIST returned, and the new mle should not be get once at that time.

Joseph Qi joseph.qi at huawei.com
Tue Sep 13 19:54:13 PDT 2016


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 at 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
> 





More information about the Ocfs2-devel mailing list