md: notify the 'degraded' sysfs attribute on failure.
We currently only 'notify' changes to the 'degraded' attribute when it decreases, not when it increases. Notifying on failure is a little awkward as it happen in interrupt context. So instead, notify when we remove the failed device from the array, which is very soon afterwards. Reported-and-tested-by: Mikhail Balabin <mbalabin@gmail.com> Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
@@ -7383,6 +7383,7 @@ static int remove_and_add_spares(struct mddev *mddev)
|
|||||||
{
|
{
|
||||||
struct md_rdev *rdev;
|
struct md_rdev *rdev;
|
||||||
int spares = 0;
|
int spares = 0;
|
||||||
|
int removed = 0;
|
||||||
|
|
||||||
mddev->curr_resync_completed = 0;
|
mddev->curr_resync_completed = 0;
|
||||||
|
|
||||||
@@ -7396,8 +7397,13 @@ static int remove_and_add_spares(struct mddev *mddev)
|
|||||||
mddev, rdev) == 0) {
|
mddev, rdev) == 0) {
|
||||||
sysfs_unlink_rdev(mddev, rdev);
|
sysfs_unlink_rdev(mddev, rdev);
|
||||||
rdev->raid_disk = -1;
|
rdev->raid_disk = -1;
|
||||||
|
removed++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (removed)
|
||||||
|
sysfs_notify(&mddev->kobj, NULL,
|
||||||
|
"degraded");
|
||||||
|
|
||||||
|
|
||||||
list_for_each_entry(rdev, &mddev->disks, same_set) {
|
list_for_each_entry(rdev, &mddev->disks, same_set) {
|
||||||
if (rdev->raid_disk >= 0 &&
|
if (rdev->raid_disk >= 0 &&
|
||||||
|
Reference in New Issue
Block a user