ReplSetDistLockManager::tryLockWithLocalWriteConcern won't return LockStateChangeFailed: it specifically accounts for it and returns LockBusy instead.
However, the MigrationManager, currently the sole user of the function, expects that error code because here. Instead of LockStateChangeFailed, MigrationManager should check for LockBusy.
If there is any 3.2 shard with an active migration, the MigrationManager will abandon all migration recoveries, not just the 3.2 migration.