md: lock address when changing attributes of component devices
Signed-off-by: Neil Brown <neilb@suse.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
c5d79adba7
commit
ca38805945
@@ -2075,12 +2075,18 @@ rdev_attr_store(struct kobject *kobj, struct attribute *attr,
|
|||||||
{
|
{
|
||||||
struct rdev_sysfs_entry *entry = container_of(attr, struct rdev_sysfs_entry, attr);
|
struct rdev_sysfs_entry *entry = container_of(attr, struct rdev_sysfs_entry, attr);
|
||||||
mdk_rdev_t *rdev = container_of(kobj, mdk_rdev_t, kobj);
|
mdk_rdev_t *rdev = container_of(kobj, mdk_rdev_t, kobj);
|
||||||
|
int rv;
|
||||||
|
|
||||||
if (!entry->store)
|
if (!entry->store)
|
||||||
return -EIO;
|
return -EIO;
|
||||||
if (!capable(CAP_SYS_ADMIN))
|
if (!capable(CAP_SYS_ADMIN))
|
||||||
return -EACCES;
|
return -EACCES;
|
||||||
return entry->store(rdev, page, length);
|
rv = mddev_lock(rdev->mddev);
|
||||||
|
if (!rv) {
|
||||||
|
rv = entry->store(rdev, page, length);
|
||||||
|
mddev_unlock(rdev->mddev);
|
||||||
|
}
|
||||||
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rdev_free(struct kobject *ko)
|
static void rdev_free(struct kobject *ko)
|
||||||
|
Reference in New Issue
Block a user