|
@@ -393,6 +393,8 @@ static int calc_degraded(struct r5conf *conf)
|
|
|
degraded = 0;
|
|
|
for (i = 0; i < conf->previous_raid_disks; i++) {
|
|
|
struct md_rdev *rdev = rcu_dereference(conf->disks[i].rdev);
|
|
|
+ if (rdev && test_bit(Faulty, &rdev->flags))
|
|
|
+ rdev = rcu_dereference(conf->disks[i].replacement);
|
|
|
if (!rdev || test_bit(Faulty, &rdev->flags))
|
|
|
degraded++;
|
|
|
else if (test_bit(In_sync, &rdev->flags))
|
|
@@ -417,6 +419,8 @@ static int calc_degraded(struct r5conf *conf)
|
|
|
degraded2 = 0;
|
|
|
for (i = 0; i < conf->raid_disks; i++) {
|
|
|
struct md_rdev *rdev = rcu_dereference(conf->disks[i].rdev);
|
|
|
+ if (rdev && test_bit(Faulty, &rdev->flags))
|
|
|
+ rdev = rcu_dereference(conf->disks[i].replacement);
|
|
|
if (!rdev || test_bit(Faulty, &rdev->flags))
|
|
|
degraded2++;
|
|
|
else if (test_bit(In_sync, &rdev->flags))
|