mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-25 13:14:07 +08:00
[PATCH] md: expose device slot information via sysfs
This the role that a device has in an array can be viewed and set. Signed-off-by: Neil Brown <neilb@suse.de> Acked-by: Greg KH <greg@kroah.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
2bf071bf50
commit
014236d2b8
@ -236,6 +236,14 @@ Each directory contains:
|
||||
providing an ongoing count for arrays with metadata managed by
|
||||
userspace.
|
||||
|
||||
slot
|
||||
This gives the role that the device has in the array. It will
|
||||
either be 'none' if the device is not active in the array
|
||||
(i.e. is a spare or has failed) or an integer less than the
|
||||
'raid_disks' number for the array indicating which possition
|
||||
it currently fills. This can only be set while assembling an
|
||||
array. A device for which this is set is assumed to be working.
|
||||
|
||||
|
||||
An active md device will also contain and entry for each active device
|
||||
in the array. These are named
|
||||
|
@ -1630,10 +1630,45 @@ errors_store(mdk_rdev_t *rdev, const char *buf, size_t len)
|
||||
static struct rdev_sysfs_entry rdev_errors =
|
||||
__ATTR(errors, 0644, errors_show, errors_store);
|
||||
|
||||
static ssize_t
|
||||
slot_show(mdk_rdev_t *rdev, char *page)
|
||||
{
|
||||
if (rdev->raid_disk < 0)
|
||||
return sprintf(page, "none\n");
|
||||
else
|
||||
return sprintf(page, "%d\n", rdev->raid_disk);
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
slot_store(mdk_rdev_t *rdev, const char *buf, size_t len)
|
||||
{
|
||||
char *e;
|
||||
int slot = simple_strtoul(buf, &e, 10);
|
||||
if (strncmp(buf, "none", 4)==0)
|
||||
slot = -1;
|
||||
else if (e==buf || (*e && *e!= '\n'))
|
||||
return -EINVAL;
|
||||
if (rdev->mddev->pers)
|
||||
/* Cannot set slot in active array (yet) */
|
||||
return -EBUSY;
|
||||
if (slot >= rdev->mddev->raid_disks)
|
||||
return -ENOSPC;
|
||||
rdev->raid_disk = slot;
|
||||
/* assume it is working */
|
||||
rdev->flags = 0;
|
||||
set_bit(In_sync, &rdev->flags);
|
||||
return len;
|
||||
}
|
||||
|
||||
|
||||
static struct rdev_sysfs_entry rdev_slot =
|
||||
__ATTR(slot, 0644, slot_show, slot_store);
|
||||
|
||||
static struct attribute *rdev_default_attrs[] = {
|
||||
&rdev_state.attr,
|
||||
&rdev_super.attr,
|
||||
&rdev_errors.attr,
|
||||
&rdev_slot.attr,
|
||||
NULL,
|
||||
};
|
||||
static ssize_t
|
||||
|
Loading…
Reference in New Issue
Block a user