]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
ocfs2/dlm: do not insert a new mle when another process is already migrating
authorxuejiufei <xuejiufei@huawei.com>
Thu, 14 Jan 2016 23:17:41 +0000 (15:17 -0800)
committerChuck Anderson <chuck.anderson@oracle.com>
Sat, 26 Nov 2016 23:43:25 +0000 (15:43 -0800)
When two processes are migrating the same lockres,
dlm_add_migration_mle() return -EEXIST, but insert a new mle in hash
list.  dlm_migrate_lockres() will detach the old mle and free the new
one which is already in hash list, that will destroy the list.

Signed-off-by: Jiufei Xue <xuejiufei@huawei.com>
Reviewed-by: Joseph Qi <joseph.qi@huawei.com>
Cc: Mark Fasheh <mfasheh@suse.de>
Cc: Joel Becker <jlbec@evilplan.org>
Reviewed-by: Junxiao Bi <junxiao.bi@oracle.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
(cherry picked from commit 32e493265b2be96404aaa478fb2913be29b06887)

Orabug: 24939243

Signed-off-by: Junxiao Bi <junxiao.bi@oracle.com>
fs/ocfs2/dlm/dlmmaster.c

index 9ced7096f5d07532ac2fbd09f36f7dc561b0e7ee..247df7f41a337089516efd344c50fa35f3558f4e 100644 (file)
@@ -2559,7 +2559,7 @@ static int dlm_migrate_lockres(struct dlm_ctxt *dlm,
        }
 
 fail:
-       if (oldmle) {
+       if (ret != -EEXIST && oldmle) {
                /* master is known, detach if not already detached */
                dlm_mle_detach_hb_events(dlm, oldmle);
                dlm_put_mle(oldmle);
@@ -3146,7 +3146,8 @@ static int dlm_add_migration_mle(struct dlm_ctxt *dlm,
                                mlog(0, "tried to migrate %.*s, but some "
                                     "process beat me to it\n",
                                     namelen, name);
-                               ret = -EEXIST;
+                               spin_unlock(&tmp->spinlock);
+                               return -EEXIST;
                        } else {
                                /* bad.  2 NODES are trying to migrate! */
                                mlog(ML_ERROR, "migration error  mle: "