|
@@ -1935,13 +1935,23 @@ static int match_mddev_units(struct mddev *mddev1, struct mddev *mddev2)
|
|
|
struct md_rdev *rdev, *rdev2;
|
|
|
|
|
|
rcu_read_lock();
|
|
|
- rdev_for_each_rcu(rdev, mddev1)
|
|
|
- rdev_for_each_rcu(rdev2, mddev2)
|
|
|
+ rdev_for_each_rcu(rdev, mddev1) {
|
|
|
+ if (test_bit(Faulty, &rdev->flags) ||
|
|
|
+ test_bit(Journal, &rdev->flags) ||
|
|
|
+ rdev->raid_disk == -1)
|
|
|
+ continue;
|
|
|
+ rdev_for_each_rcu(rdev2, mddev2) {
|
|
|
+ if (test_bit(Faulty, &rdev2->flags) ||
|
|
|
+ test_bit(Journal, &rdev2->flags) ||
|
|
|
+ rdev2->raid_disk == -1)
|
|
|
+ continue;
|
|
|
if (rdev->bdev->bd_contains ==
|
|
|
rdev2->bdev->bd_contains) {
|
|
|
rcu_read_unlock();
|
|
|
return 1;
|
|
|
}
|
|
|
+ }
|
|
|
+ }
|
|
|
rcu_read_unlock();
|
|
|
return 0;
|
|
|
}
|