Commit 9a8049af authored by Tejun Heo's avatar Tejun Heo Committed by Greg Kroah-Hartman

kernfs: update sysfs_init_inode_attrs()

sysfs_init_inode_attrs() is a bit clumsy to use requiring the caller
to check whether @sd->s_iattr is already set or not.  Rename it to
sysfs_inode_attrs(), update it to check whether @sd->s_iattr is
already initialized before trying to initialize it and return
@sd->s_iattr.  This simplifies the callers.

While at it,

* Rename struct sysfs_inode_attrs pointer variables to "attrs".  As
  kernfs no longer deals with "struct attribute", this isn't confusing
  and makes it easier to distinguish from struct iattr pointers.

* A new field will be added to sysfs_inode_attrs.  Reindent in
  preparation.

This patch doesn't introduce any behavior changes.
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent e756bc56
...@@ -43,15 +43,17 @@ void __init sysfs_inode_init(void) ...@@ -43,15 +43,17 @@ void __init sysfs_inode_init(void)
panic("failed to init sysfs_backing_dev_info"); panic("failed to init sysfs_backing_dev_info");
} }
static struct sysfs_inode_attrs *sysfs_init_inode_attrs(struct sysfs_dirent *sd) static struct sysfs_inode_attrs *sysfs_inode_attrs(struct sysfs_dirent *sd)
{ {
struct sysfs_inode_attrs *attrs;
struct iattr *iattrs; struct iattr *iattrs;
attrs = kzalloc(sizeof(struct sysfs_inode_attrs), GFP_KERNEL); if (sd->s_iattr)
if (!attrs) return sd->s_iattr;
sd->s_iattr = kzalloc(sizeof(struct sysfs_inode_attrs), GFP_KERNEL);
if (!sd->s_iattr)
return NULL; return NULL;
iattrs = &attrs->ia_iattr; iattrs = &sd->s_iattr->ia_iattr;
/* assign default attributes */ /* assign default attributes */
iattrs->ia_mode = sd->s_mode; iattrs->ia_mode = sd->s_mode;
...@@ -59,26 +61,20 @@ static struct sysfs_inode_attrs *sysfs_init_inode_attrs(struct sysfs_dirent *sd) ...@@ -59,26 +61,20 @@ static struct sysfs_inode_attrs *sysfs_init_inode_attrs(struct sysfs_dirent *sd)
iattrs->ia_gid = GLOBAL_ROOT_GID; iattrs->ia_gid = GLOBAL_ROOT_GID;
iattrs->ia_atime = iattrs->ia_mtime = iattrs->ia_ctime = CURRENT_TIME; iattrs->ia_atime = iattrs->ia_mtime = iattrs->ia_ctime = CURRENT_TIME;
return attrs; return sd->s_iattr;
} }
static int __kernfs_setattr(struct sysfs_dirent *sd, const struct iattr *iattr) static int __kernfs_setattr(struct sysfs_dirent *sd, const struct iattr *iattr)
{ {
struct sysfs_inode_attrs *sd_attrs; struct sysfs_inode_attrs *attrs;
struct iattr *iattrs; struct iattr *iattrs;
unsigned int ia_valid = iattr->ia_valid; unsigned int ia_valid = iattr->ia_valid;
sd_attrs = sd->s_iattr; attrs = sysfs_inode_attrs(sd);
if (!attrs)
return -ENOMEM;
if (!sd_attrs) { iattrs = &attrs->ia_iattr;
/* setting attributes for the first time, allocate now */
sd_attrs = sysfs_init_inode_attrs(sd);
if (!sd_attrs)
return -ENOMEM;
sd->s_iattr = sd_attrs;
}
/* attributes were changed at least once in past */
iattrs = &sd_attrs->ia_iattr;
if (ia_valid & ATTR_UID) if (ia_valid & ATTR_UID)
iattrs->ia_uid = iattr->ia_uid; iattrs->ia_uid = iattr->ia_uid;
...@@ -143,22 +139,19 @@ int sysfs_setattr(struct dentry *dentry, struct iattr *iattr) ...@@ -143,22 +139,19 @@ int sysfs_setattr(struct dentry *dentry, struct iattr *iattr)
static int sysfs_sd_setsecdata(struct sysfs_dirent *sd, void **secdata, static int sysfs_sd_setsecdata(struct sysfs_dirent *sd, void **secdata,
u32 *secdata_len) u32 *secdata_len)
{ {
struct sysfs_inode_attrs *iattrs; struct sysfs_inode_attrs *attrs;
void *old_secdata; void *old_secdata;
size_t old_secdata_len; size_t old_secdata_len;
if (!sd->s_iattr) { attrs = sysfs_inode_attrs(sd);
sd->s_iattr = sysfs_init_inode_attrs(sd); if (!attrs)
if (!sd->s_iattr) return -ENOMEM;
return -ENOMEM;
}
iattrs = sd->s_iattr; old_secdata = attrs->ia_secdata;
old_secdata = iattrs->ia_secdata; old_secdata_len = attrs->ia_secdata_len;
old_secdata_len = iattrs->ia_secdata_len;
iattrs->ia_secdata = *secdata; attrs->ia_secdata = *secdata;
iattrs->ia_secdata_len = *secdata_len; attrs->ia_secdata_len = *secdata_len;
*secdata = old_secdata; *secdata = old_secdata;
*secdata_len = old_secdata_len; *secdata_len = old_secdata_len;
...@@ -216,17 +209,16 @@ static inline void set_inode_attr(struct inode *inode, struct iattr *iattr) ...@@ -216,17 +209,16 @@ static inline void set_inode_attr(struct inode *inode, struct iattr *iattr)
static void sysfs_refresh_inode(struct sysfs_dirent *sd, struct inode *inode) static void sysfs_refresh_inode(struct sysfs_dirent *sd, struct inode *inode)
{ {
struct sysfs_inode_attrs *iattrs = sd->s_iattr; struct sysfs_inode_attrs *attrs = sd->s_iattr;
inode->i_mode = sd->s_mode; inode->i_mode = sd->s_mode;
if (iattrs) { if (attrs) {
/* sysfs_dirent has non-default attributes /* sysfs_dirent has non-default attributes
* get them from persistent copy in sysfs_dirent * get them from persistent copy in sysfs_dirent
*/ */
set_inode_attr(inode, &iattrs->ia_iattr); set_inode_attr(inode, &attrs->ia_iattr);
security_inode_notifysecctx(inode, security_inode_notifysecctx(inode, attrs->ia_secdata,
iattrs->ia_secdata, attrs->ia_secdata_len);
iattrs->ia_secdata_len);
} }
if (sysfs_type(sd) == SYSFS_DIR) if (sysfs_type(sd) == SYSFS_DIR)
......
...@@ -18,9 +18,9 @@ ...@@ -18,9 +18,9 @@
#include <linux/kernfs.h> #include <linux/kernfs.h>
struct sysfs_inode_attrs { struct sysfs_inode_attrs {
struct iattr ia_iattr; struct iattr ia_iattr;
void *ia_secdata; void *ia_secdata;
u32 ia_secdata_len; u32 ia_secdata_len;
}; };
#define SD_DEACTIVATED_BIAS INT_MIN #define SD_DEACTIVATED_BIAS INT_MIN
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment