diff options
Diffstat (limited to 'drivers/md/raid1.c')
| -rw-r--r-- | drivers/md/raid1.c | 12 |
1 files changed, 7 insertions, 5 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 | ||
