|
@@ -4042,20 +4042,21 @@ static ssize_t
|
|
action_show(struct mddev *mddev, char *page)
|
|
action_show(struct mddev *mddev, char *page)
|
|
{
|
|
{
|
|
char *type = "idle";
|
|
char *type = "idle";
|
|
- if (test_bit(MD_RECOVERY_FROZEN, &mddev->recovery))
|
|
|
|
|
|
+ unsigned long recovery = mddev->recovery;
|
|
|
|
+ if (test_bit(MD_RECOVERY_FROZEN, &recovery))
|
|
type = "frozen";
|
|
type = "frozen";
|
|
- else if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery) ||
|
|
|
|
- (!mddev->ro && test_bit(MD_RECOVERY_NEEDED, &mddev->recovery))) {
|
|
|
|
- if (test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery))
|
|
|
|
|
|
+ else if (test_bit(MD_RECOVERY_RUNNING, &recovery) ||
|
|
|
|
+ (!mddev->ro && test_bit(MD_RECOVERY_NEEDED, &recovery))) {
|
|
|
|
+ if (test_bit(MD_RECOVERY_RESHAPE, &recovery))
|
|
type = "reshape";
|
|
type = "reshape";
|
|
- else if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery)) {
|
|
|
|
- if (!test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery))
|
|
|
|
|
|
+ else if (test_bit(MD_RECOVERY_SYNC, &recovery)) {
|
|
|
|
+ if (!test_bit(MD_RECOVERY_REQUESTED, &recovery))
|
|
type = "resync";
|
|
type = "resync";
|
|
- else if (test_bit(MD_RECOVERY_CHECK, &mddev->recovery))
|
|
|
|
|
|
+ else if (test_bit(MD_RECOVERY_CHECK, &recovery))
|
|
type = "check";
|
|
type = "check";
|
|
else
|
|
else
|
|
type = "repair";
|
|
type = "repair";
|
|
- } else if (test_bit(MD_RECOVERY_RECOVER, &mddev->recovery))
|
|
|
|
|
|
+ } else if (test_bit(MD_RECOVERY_RECOVER, &recovery))
|
|
type = "recover";
|
|
type = "recover";
|
|
}
|
|
}
|
|
return sprintf(page, "%s\n", type);
|
|
return sprintf(page, "%s\n", type);
|
|
@@ -4572,11 +4573,7 @@ md_attr_show(struct kobject *kobj, struct attribute *attr, char *page)
|
|
mddev_get(mddev);
|
|
mddev_get(mddev);
|
|
spin_unlock(&all_mddevs_lock);
|
|
spin_unlock(&all_mddevs_lock);
|
|
|
|
|
|
- rv = mddev_lock(mddev);
|
|
|
|
- if (!rv) {
|
|
|
|
- rv = entry->show(mddev, page);
|
|
|
|
- mddev_unlock(mddev);
|
|
|
|
- }
|
|
|
|
|
|
+ rv = entry->show(mddev, page);
|
|
mddev_put(mddev);
|
|
mddev_put(mddev);
|
|
return rv;
|
|
return rv;
|
|
}
|
|
}
|