summaryrefslogtreecommitdiff
path: root/fs/sysfs/file.c
diff options
context:
space:
mode:
authorTejun Heo <tj@kernel.org>2013-11-23 17:21:52 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-11-27 13:57:57 -0800
commit5d60418e54751c856f5aecc308620fde9572e481 (patch)
tree364f8e338ee33fbd0186c53ed962438255746854 /fs/sysfs/file.c
parent890ece160c6465b49c42975d529c3481d89da8f5 (diff)
sysfs, kernfs: introduce kernfs_setattr()
Introduce kernfs setattr interface - kernfs_setattr(). sysfs_sd_setattr() is renamed to __kernfs_setattr() and kernfs_setattr() is a simple wrapper around it with sysfs_mutex locking. sysfs_chmod_file() is updated to get an explicit ref on kobj->sd and then invoke kernfs_setattr() so that it doesn't have to use internal interface. This patch doesn't introduce any behavior differences. v2: Dummy implementation for !CONFIG_SYSFS updated to return -ENOSYS. Signed-off-by: Tejun Heo <tj@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'fs/sysfs/file.c')
-rw-r--r--fs/sysfs/file.c13
1 files changed, 5 insertions, 8 deletions
diff --git a/fs/sysfs/file.c b/fs/sysfs/file.c
index 5664410136ba..564abd201afb 100644
--- a/fs/sysfs/file.c
+++ b/fs/sysfs/file.c
@@ -922,19 +922,16 @@ int sysfs_chmod_file(struct kobject *kobj, const struct attribute *attr,
struct iattr newattrs;
int rc;
- mutex_lock(&sysfs_mutex);
-
- rc = -ENOENT;
- sd = sysfs_find_dirent(kobj->sd, attr->name, NULL);
+ sd = sysfs_get_dirent(kobj->sd, attr->name);
if (!sd)
- goto out;
+ return -ENOENT;
newattrs.ia_mode = (mode & S_IALLUGO) | (sd->s_mode & ~S_IALLUGO);
newattrs.ia_valid = ATTR_MODE;
- rc = sysfs_sd_setattr(sd, &newattrs);
- out:
- mutex_unlock(&sysfs_mutex);
+ rc = kernfs_setattr(sd, &newattrs);
+
+ sysfs_put(sd);
return rc;
}
EXPORT_SYMBOL_GPL(sysfs_chmod_file);