Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

[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
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -302,6 +302,9 @@ Each directory contains:
			 This includes spares that are in the process
			 of being recoverred to
	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
	An approximate count of read errors that have been detected on
+25 −1
Original line number Diff line number Diff line
@@ -1745,8 +1745,32 @@ state_show(mdk_rdev_t *rdev, char *page)
	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
rdev_state = __ATTR_RO(state);
rdev_state = __ATTR(state, 0644, state_show, state_store);

static ssize_t
super_show(mdk_rdev_t *rdev, char *page)