Commit 45dc2de1 authored by NeilBrown's avatar NeilBrown Committed by Linus Torvalds

[PATCH] md: Allow rdev state to be set via sysfs

The md/dev-XXX/state file can now be written:

 "faulty" simulates an error on the device
 "remove" removes the device from the array (if it is not busy)
Signed-off-by: default avatarNeil Brown <neilb@suse.de>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 9e653b63
...@@ -302,6 +302,9 @@ Each directory contains: ...@@ -302,6 +302,9 @@ Each directory contains:
This includes spares that are in the process This includes spares that are in the process
of being recoverred to of being recoverred to
This list make grow in future. This list make grow in future.
This can be written to.
Writing "faulty" simulates a failure on the device.
Writing "remove" removes the device from the array.
errors errors
An approximate count of read errors that have been detected on An approximate count of read errors that have been detected on
......
...@@ -1745,8 +1745,32 @@ state_show(mdk_rdev_t *rdev, char *page) ...@@ -1745,8 +1745,32 @@ state_show(mdk_rdev_t *rdev, char *page)
return len+sprintf(page+len, "\n"); return len+sprintf(page+len, "\n");
} }
static ssize_t
state_store(mdk_rdev_t *rdev, const char *buf, size_t len)
{
/* can write
* faulty - simulates and error
* remove - disconnects the device
*/
int err = -EINVAL;
if (cmd_match(buf, "faulty") && rdev->mddev->pers) {
md_error(rdev->mddev, rdev);
err = 0;
} else if (cmd_match(buf, "remove")) {
if (rdev->raid_disk >= 0)
err = -EBUSY;
else {
mddev_t *mddev = rdev->mddev;
kick_rdev_from_array(rdev);
md_update_sb(mddev);
md_new_event(mddev);
err = 0;
}
}
return err ? err : len;
}
static struct rdev_sysfs_entry static struct rdev_sysfs_entry
rdev_state = __ATTR_RO(state); rdev_state = __ATTR(state, 0644, state_show, state_store);
static ssize_t static ssize_t
super_show(mdk_rdev_t *rdev, char *page) super_show(mdk_rdev_t *rdev, char *page)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment