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:
NeilBrown 2008-02-06 01:39:55 -08:00 committed by Linus Torvalds
parent c5d79adba7
commit ca38805945

View File

@ -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);
mdk_rdev_t *rdev = container_of(kobj, mdk_rdev_t, kobj);
int rv;
if (!entry->store)
return -EIO;
if (!capable(CAP_SYS_ADMIN))
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)