kernfs: update sysfs_init_inode_attrs()
authorTejun Heo <tj@kernel.org>
Sat, 23 Nov 2013 22:40:01 +0000 (17:40 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 4 Dec 2013 15:34:45 +0000 (07:34 -0800)
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: Tejun Heo <tj@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/kernfs/inode.c
fs/kernfs/kernfs-internal.h

index b4cae6fd717beb7044cd49fd223a90431c578c4b..a1f83825afca12b2065035ecded3dc537887fc93 100644 (file)
@@ -43,15 +43,17 @@ void __init sysfs_inode_init(void)
                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;
 
-       attrs = kzalloc(sizeof(struct sysfs_inode_attrs), GFP_KERNEL);
-       if (!attrs)
+       if (sd->s_iattr)
+               return sd->s_iattr;
+
+       sd->s_iattr = kzalloc(sizeof(struct sysfs_inode_attrs), GFP_KERNEL);
+       if (!sd->s_iattr)
                return NULL;
-       iattrs = &attrs->ia_iattr;
+       iattrs = &sd->s_iattr->ia_iattr;
 
        /* assign default attributes */
        iattrs->ia_mode = sd->s_mode;
@@ -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_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)
 {
-       struct sysfs_inode_attrs *sd_attrs;
+       struct sysfs_inode_attrs *attrs;
        struct iattr *iattrs;
        unsigned int ia_valid = iattr->ia_valid;
 
-       sd_attrs = sd->s_iattr;
+       attrs = sysfs_inode_attrs(sd);
+       if (!attrs)
+               return -ENOMEM;
 
-       if (!sd_attrs) {
-               /* 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;
+       iattrs = &attrs->ia_iattr;
 
        if (ia_valid & ATTR_UID)
                iattrs->ia_uid = iattr->ia_uid;
@@ -143,22 +139,19 @@ out:
 static int sysfs_sd_setsecdata(struct sysfs_dirent *sd, void **secdata,
                               u32 *secdata_len)
 {
-       struct sysfs_inode_attrs *iattrs;
+       struct sysfs_inode_attrs *attrs;
        void *old_secdata;
        size_t old_secdata_len;
 
-       if (!sd->s_iattr) {
-               sd->s_iattr = sysfs_init_inode_attrs(sd);
-               if (!sd->s_iattr)
-                       return -ENOMEM;
-       }
+       attrs = sysfs_inode_attrs(sd);
+       if (!attrs)
+               return -ENOMEM;
 
-       iattrs = sd->s_iattr;
-       old_secdata = iattrs->ia_secdata;
-       old_secdata_len = iattrs->ia_secdata_len;
+       old_secdata = attrs->ia_secdata;
+       old_secdata_len = attrs->ia_secdata_len;
 
-       iattrs->ia_secdata = *secdata;
-       iattrs->ia_secdata_len = *secdata_len;
+       attrs->ia_secdata = *secdata;
+       attrs->ia_secdata_len = *secdata_len;
 
        *secdata = old_secdata;
        *secdata_len = old_secdata_len;
@@ -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)
 {
-       struct sysfs_inode_attrs *iattrs = sd->s_iattr;
+       struct sysfs_inode_attrs *attrs = sd->s_iattr;
 
        inode->i_mode = sd->s_mode;
-       if (iattrs) {
+       if (attrs) {
                /* sysfs_dirent has non-default attributes
                 * get them from persistent copy in sysfs_dirent
                 */
-               set_inode_attr(inode, &iattrs->ia_iattr);
-               security_inode_notifysecctx(inode,
-                                           iattrs->ia_secdata,
-                                           iattrs->ia_secdata_len);
+               set_inode_attr(inode, &attrs->ia_iattr);
+               security_inode_notifysecctx(inode, attrs->ia_secdata,
+                                           attrs->ia_secdata_len);
        }
 
        if (sysfs_type(sd) == SYSFS_DIR)
index d1ff591c5cf3be1e7da34e0bffb0ea780ca1bdd6..f25b3548bccaff561a552c559c8b4c42714d3c3e 100644 (file)
@@ -18,9 +18,9 @@
 #include <linux/kernfs.h>
 
 struct sysfs_inode_attrs {
-       struct iattr    ia_iattr;
-       void            *ia_secdata;
-       u32             ia_secdata_len;
+       struct iattr            ia_iattr;
+       void                    *ia_secdata;
+       u32                     ia_secdata_len;
 };
 
 #define SD_DEACTIVATED_BIAS            INT_MIN