diff options
| -rw-r--r-- | drivers/md/raid1.c | 12 | ||||
| -rw-r--r-- | drivers/md/raid10.c | 12 | ||||
| -rw-r--r-- | drivers/md/raid5.c | 12 |
3 files changed, 21 insertions, 15 deletions
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index 0e1abf1bb38e..64d96526a9cc 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c | |||
| @@ -1120,6 +1120,8 @@ static int raid1_spare_active(mddev_t *mddev) | |||
| 1120 | { | 1120 | { |
| 1121 | int i; | 1121 | int i; |
| 1122 | conf_t *conf = mddev->private; | 1122 | conf_t *conf = mddev->private; |
| 1123 | int count = 0; | ||
| 1124 | unsigned long flags; | ||
| 1123 | 1125 | ||
| 1124 | /* | 1126 | /* |
| 1125 | * Find all failed disks within the RAID1 configuration | 1127 | * Find all failed disks within the RAID1 configuration |
| @@ -1131,16 +1133,16 @@ static int raid1_spare_active(mddev_t *mddev) | |||
| 1131 | if (rdev | 1133 | if (rdev |
| 1132 | && !test_bit(Faulty, &rdev->flags) | 1134 | && !test_bit(Faulty, &rdev->flags) |
| 1133 | && !test_and_set_bit(In_sync, &rdev->flags)) { | 1135 | && !test_and_set_bit(In_sync, &rdev->flags)) { |
| 1134 | unsigned long flags; | 1136 | count++; |
| 1135 | spin_lock_irqsave(&conf->device_lock, flags); | ||
| 1136 | mddev->degraded--; | ||
| 1137 | spin_unlock_irqrestore(&conf->device_lock, flags); | ||
| 1138 | sysfs_notify_dirent(rdev->sysfs_state); | 1137 | sysfs_notify_dirent(rdev->sysfs_state); |
| 1139 | } | 1138 | } |
| 1140 | } | 1139 | } |
| 1140 | spin_lock_irqsave(&conf->device_lock, flags); | ||
| 1141 | mddev->degraded -= count; | ||
| 1142 | spin_unlock_irqrestore(&conf->device_lock, flags); | ||
| 1141 | 1143 | ||
| 1142 | print_conf(conf); | 1144 | print_conf(conf); |
| 1143 | return 0; | 1145 | return count; |
| 1144 | } | 1146 | } |
| 1145 | 1147 | ||
| 1146 | 1148 | ||
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c index 76d1fc9c65ba..a2f8a7153dce 100644 --- a/drivers/md/raid10.c +++ b/drivers/md/raid10.c | |||
| @@ -1116,6 +1116,8 @@ static int raid10_spare_active(mddev_t *mddev) | |||
| 1116 | int i; | 1116 | int i; |
| 1117 | conf_t *conf = mddev->private; | 1117 | conf_t *conf = mddev->private; |
| 1118 | mirror_info_t *tmp; | 1118 | mirror_info_t *tmp; |
| 1119 | int count = 0; | ||
| 1120 | unsigned long flags; | ||
| 1119 | 1121 | ||
| 1120 | /* | 1122 | /* |
| 1121 | * Find all non-in_sync disks within the RAID10 configuration | 1123 | * Find all non-in_sync disks within the RAID10 configuration |
| @@ -1126,16 +1128,16 @@ static int raid10_spare_active(mddev_t *mddev) | |||
| 1126 | if (tmp->rdev | 1128 | if (tmp->rdev |
| 1127 | && !test_bit(Faulty, &tmp->rdev->flags) | 1129 | && !test_bit(Faulty, &tmp->rdev->flags) |
| 1128 | && !test_and_set_bit(In_sync, &tmp->rdev->flags)) { | 1130 | && !test_and_set_bit(In_sync, &tmp->rdev->flags)) { |
| 1129 | unsigned long flags; | 1131 | count++; |
| 1130 | spin_lock_irqsave(&conf->device_lock, flags); | ||
| 1131 | mddev->degraded--; | ||
| 1132 | spin_unlock_irqrestore(&conf->device_lock, flags); | ||
| 1133 | sysfs_notify_dirent(tmp->rdev->sysfs_state); | 1132 | sysfs_notify_dirent(tmp->rdev->sysfs_state); |
| 1134 | } | 1133 | } |
| 1135 | } | 1134 | } |
| 1135 | spin_lock_irqsave(&conf->device_lock, flags); | ||
| 1136 | mddev->degraded -= count; | ||
| 1137 | spin_unlock_irqrestore(&conf->device_lock, flags); | ||
| 1136 | 1138 | ||
| 1137 | print_conf(conf); | 1139 | print_conf(conf); |
| 1138 | return 0; | 1140 | return count; |
| 1139 | } | 1141 | } |
| 1140 | 1142 | ||
| 1141 | 1143 | ||
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index 7865dd090bde..69b0a169e43d 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c | |||
| @@ -5330,6 +5330,8 @@ static int raid5_spare_active(mddev_t *mddev) | |||
| 5330 | int i; | 5330 | int i; |
| 5331 | raid5_conf_t *conf = mddev->private; | 5331 | raid5_conf_t *conf = mddev->private; |
| 5332 | struct disk_info *tmp; | 5332 | struct disk_info *tmp; |
| 5333 | int count = 0; | ||
| 5334 | unsigned long flags; | ||
| 5333 | 5335 | ||
| 5334 | for (i = 0; i < conf->raid_disks; i++) { | 5336 | for (i = 0; i < conf->raid_disks; i++) { |
| 5335 | tmp = conf->disks + i; | 5337 | tmp = conf->disks + i; |
| @@ -5337,15 +5339,15 @@ static int raid5_spare_active(mddev_t *mddev) | |||
| 5337 | && tmp->rdev->recovery_offset == MaxSector | 5339 | && tmp->rdev->recovery_offset == MaxSector |
| 5338 | && !test_bit(Faulty, &tmp->rdev->flags) | 5340 | && !test_bit(Faulty, &tmp->rdev->flags) |
| 5339 | && !test_and_set_bit(In_sync, &tmp->rdev->flags)) { | 5341 | && !test_and_set_bit(In_sync, &tmp->rdev->flags)) { |
| 5340 | unsigned long flags; | 5342 | count++; |
| 5341 | spin_lock_irqsave(&conf->device_lock, flags); | ||
| 5342 | mddev->degraded--; | ||
| 5343 | spin_unlock_irqrestore(&conf->device_lock, flags); | ||
| 5344 | sysfs_notify_dirent(tmp->rdev->sysfs_state); | 5343 | sysfs_notify_dirent(tmp->rdev->sysfs_state); |
| 5345 | } | 5344 | } |
| 5346 | } | 5345 | } |
| 5346 | spin_lock_irqsave(&conf->device_lock, flags); | ||
| 5347 | mddev->degraded -= count; | ||
| 5348 | spin_unlock_irqrestore(&conf->device_lock, flags); | ||
| 5347 | print_raid5_conf(conf); | 5349 | print_raid5_conf(conf); |
| 5348 | return 0; | 5350 | return count; |
| 5349 | } | 5351 | } |
| 5350 | 5352 | ||
| 5351 | static int raid5_remove_disk(mddev_t *mddev, int number) | 5353 | static int raid5_remove_disk(mddev_t *mddev, int number) |
