ocfs2/dlm: get mle inuse only when it is initialized
authorChangwei Ge <ge.changwei@h3c.com>
Thu, 16 Nov 2017 01:31:52 +0000 (17:31 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 16 Nov 2017 02:21:01 +0000 (18:21 -0800)
When dlm_add_migration_mle returns -EEXIST, previously input mle will
not be initialized.  So we can't use its associated dlm object.  And we
truly don't need this mle for already launched migration progress, since
oldmle has taken this role.

Link: http://lkml.kernel.org/r/63ADC13FD55D6546B7DECE290D39E373CED7AA61@H3CMLB14-EX.srv.huawei-3com.com
Signed-off-by: Changwei Ge <ge.changwei@h3c.com>
Reviewed-by: Joseph Qi <jiangqi903@gmail.com>
Cc: Mark Fasheh <mfasheh@versity.com>
Cc: Joel Becker <jlbec@evilplan.org>
Cc: Junxiao Bi <junxiao.bi@oracle.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
fs/ocfs2/dlm/dlmmaster.c

index 3e04279446e8d2270cf1fdf11b589a08765952f9..9c3e0f13ca87dbd7860d4dea9721fd4421d41106 100644 (file)
@@ -2616,7 +2616,9 @@ static int dlm_migrate_lockres(struct dlm_ctxt *dlm,
         * otherwise the assert_master from the new
         * master will destroy this.
         */
-       dlm_get_mle_inuse(mle);
+       if (ret != -EEXIST)
+               dlm_get_mle_inuse(mle);
+
        spin_unlock(&dlm->master_lock);
        spin_unlock(&dlm->spinlock);