forked from Minki/linux
[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: Neil Brown <neilb@suse.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
9e653b6342
commit
45dc2de1e5
@ -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)
|
|||||||
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)
|
||||||
|
Loading…
Reference in New Issue
Block a user