diff options
| -rw-r--r-- | drivers/md/raid5.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index 380cb68856b1..7031b865b3a0 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c | |||
| @@ -393,6 +393,8 @@ static int calc_degraded(struct r5conf *conf) | |||
| 393 | degraded = 0; | 393 | degraded = 0; |
| 394 | for (i = 0; i < conf->previous_raid_disks; i++) { | 394 | for (i = 0; i < conf->previous_raid_disks; i++) { |
| 395 | struct md_rdev *rdev = rcu_dereference(conf->disks[i].rdev); | 395 | struct md_rdev *rdev = rcu_dereference(conf->disks[i].rdev); |
| 396 | if (rdev && test_bit(Faulty, &rdev->flags)) | ||
| 397 | rdev = rcu_dereference(conf->disks[i].replacement); | ||
| 396 | if (!rdev || test_bit(Faulty, &rdev->flags)) | 398 | if (!rdev || test_bit(Faulty, &rdev->flags)) |
| 397 | degraded++; | 399 | degraded++; |
| 398 | else if (test_bit(In_sync, &rdev->flags)) | 400 | else if (test_bit(In_sync, &rdev->flags)) |
| @@ -417,6 +419,8 @@ static int calc_degraded(struct r5conf *conf) | |||
| 417 | degraded2 = 0; | 419 | degraded2 = 0; |
| 418 | for (i = 0; i < conf->raid_disks; i++) { | 420 | for (i = 0; i < conf->raid_disks; i++) { |
| 419 | struct md_rdev *rdev = rcu_dereference(conf->disks[i].rdev); | 421 | struct md_rdev *rdev = rcu_dereference(conf->disks[i].rdev); |
| 422 | if (rdev && test_bit(Faulty, &rdev->flags)) | ||
| 423 | rdev = rcu_dereference(conf->disks[i].replacement); | ||
| 420 | if (!rdev || test_bit(Faulty, &rdev->flags)) | 424 | if (!rdev || test_bit(Faulty, &rdev->flags)) |
| 421 | degraded2++; | 425 | degraded2++; |
| 422 | else if (test_bit(In_sync, &rdev->flags)) | 426 | else if (test_bit(In_sync, &rdev->flags)) |
