Skip to content

Commit

Permalink
Make sure all changes to md/degraded are notified.
Browse files Browse the repository at this point in the history
When a device fails, when a spare is activated, when
an array is reshaped, or when an array is started,
the extent to which the array is degraded can change.

Signed-off-by: Neil Brown <neilb@suse.de>
  • Loading branch information
Neil Brown committed Jun 27, 2008
1 parent 72a23c2 commit a99ac97
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 1 deletion.
7 changes: 7 additions & 0 deletions Documentation/md.txt
Original file line number Diff line number Diff line change
Expand Up @@ -392,6 +392,13 @@ also have
achieved. In that case, the transition to "recover" isn't
notified, but the transition away is.

degraded
This contains a count of the number of devices by which the
arrays is degraded. So an optimal array with show '0'. A
single failed/missing drive will show '1', etc.
This file responds to select/poll, any increase or decrease
in the count of missing devices will trigger an event.

mismatch_count
When performing 'check' and 'repair', and possibly when
performing 'resync', md will count the number of errors that are
Expand Down
6 changes: 5 additions & 1 deletion drivers/md/md.c
Original file line number Diff line number Diff line change
Expand Up @@ -2969,6 +2969,7 @@ action_store(mddev_t *mddev, const char *page, size_t len)
err = mddev->pers->start_reshape(mddev);
if (err)
return err;
sysfs_notify(&mddev->kobj, NULL, "degraded");
} else {
if (cmd_match(page, "check"))
set_bit(MD_RECOVERY_CHECK, &mddev->recovery);
Expand Down Expand Up @@ -3686,6 +3687,7 @@ static int do_md_run(mddev_t * mddev)
md_new_event(mddev);
sysfs_notify(&mddev->kobj, NULL, "array_state");
sysfs_notify(&mddev->kobj, NULL, "sync_action");
sysfs_notify(&mddev->kobj, NULL, "degraded");
kobject_uevent(&mddev->gendisk->dev.kobj, KOBJ_CHANGE);
return 0;
}
Expand Down Expand Up @@ -6049,7 +6051,9 @@ void md_check_recovery(mddev_t *mddev)
if (!test_bit(MD_RECOVERY_INTR, &mddev->recovery)) {
/* success...*/
/* activate any spares */
mddev->pers->spare_active(mddev);
if (mddev->pers->spare_active(mddev))
sysfs_notify(&mddev->kobj, NULL,
"degraded");
}
md_update_sb(mddev, 1);

Expand Down

0 comments on commit a99ac97

Please sign in to comment.