Details
-
Bug
-
Resolution: Unresolved
-
Minor
-
None
-
Lustre 2.14.0, Lustre 2.16.1
-
None
-
3
-
9223372036854775807
Description
mdt_restripe_migrate_add() adds a stripe to migrating list of a restriper under restriper->mdr_lock:
void mdt_restripe_migrate_add(struct mdt_thread_info *info, .. spin_lock(&restriper->mdr_lock); .. list_add_tail(&o->mot_restripe_linkage, &restriper->mdr_migrating); .. spin_unlock(&restriper->mdr_lock);
removal of a stripe from the migrating list is executed under mdt->mdt_lock (in mdt_restripe_migrate() and in mdt_restripe_migrate_finish()):
static int mdt_restripe_migrate(struct mdt_thread_info *info) .. spin_lock(&mdt->mdt_lock); stripe->mot_restriping = 0; list_del_init(&stripe->mot_restripe_linkage); spin_unlock(&mdt->mdt_lock); ..
That may cause list corruption.