diff options
-rw-r--r-- | drivers/md/md.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c index 89149acd8a5e..fe67272d0b1b 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c | |||
@@ -1935,13 +1935,23 @@ static int match_mddev_units(struct mddev *mddev1, struct mddev *mddev2) | |||
1935 | struct md_rdev *rdev, *rdev2; | 1935 | struct md_rdev *rdev, *rdev2; |
1936 | 1936 | ||
1937 | rcu_read_lock(); | 1937 | rcu_read_lock(); |
1938 | rdev_for_each_rcu(rdev, mddev1) | 1938 | rdev_for_each_rcu(rdev, mddev1) { |
1939 | rdev_for_each_rcu(rdev2, mddev2) | 1939 | if (test_bit(Faulty, &rdev->flags) || |
1940 | test_bit(Journal, &rdev->flags) || | ||
1941 | rdev->raid_disk == -1) | ||
1942 | continue; | ||
1943 | rdev_for_each_rcu(rdev2, mddev2) { | ||
1944 | if (test_bit(Faulty, &rdev2->flags) || | ||
1945 | test_bit(Journal, &rdev2->flags) || | ||
1946 | rdev2->raid_disk == -1) | ||
1947 | continue; | ||
1940 | if (rdev->bdev->bd_contains == | 1948 | if (rdev->bdev->bd_contains == |
1941 | rdev2->bdev->bd_contains) { | 1949 | rdev2->bdev->bd_contains) { |
1942 | rcu_read_unlock(); | 1950 | rcu_read_unlock(); |
1943 | return 1; | 1951 | return 1; |
1944 | } | 1952 | } |
1953 | } | ||
1954 | } | ||
1945 | rcu_read_unlock(); | 1955 | rcu_read_unlock(); |
1946 | return 0; | 1956 | return 0; |
1947 | } | 1957 | } |