sysfs: Fix sysfs owner and group.
authorArve Hjønnevåg <arve@android.com>
Thu, 17 Dec 2009 05:15:49 +0000 (21:15 -0800)
committerArve Hjønnevåg <arve@android.com>
Thu, 4 Feb 2010 04:48:08 +0000 (20:48 -0800)
First call to sysfs_setattr ignored the requested owner and group.

Change-Id: I8343f818c65c54f6dbb55533cd34b31eeba5b554
Signed-off-by: Arve Hjønnevåg <arve@android.com>
fs/sysfs/inode.c

index e28cecf179f50d6c746312baac37b045a326d5da..753018af451f9e8dcb202f4a7bcb88113f4ec145 100644 (file)
@@ -94,30 +94,28 @@ int sysfs_setattr(struct dentry * dentry, struct iattr * iattr)
                if (!sd_attrs)
                        return -ENOMEM;
                sd->s_iattr = sd_attrs;
-       } else {
-               /* attributes were changed at least once in past */
-               iattrs = &sd_attrs->ia_iattr;
-
-               if (ia_valid & ATTR_UID)
-                       iattrs->ia_uid = iattr->ia_uid;
-               if (ia_valid & ATTR_GID)
-                       iattrs->ia_gid = iattr->ia_gid;
-               if (ia_valid & ATTR_ATIME)
-                       iattrs->ia_atime = timespec_trunc(iattr->ia_atime,
-                                       inode->i_sb->s_time_gran);
-               if (ia_valid & ATTR_MTIME)
-                       iattrs->ia_mtime = timespec_trunc(iattr->ia_mtime,
-                                       inode->i_sb->s_time_gran);
-               if (ia_valid & ATTR_CTIME)
-                       iattrs->ia_ctime = timespec_trunc(iattr->ia_ctime,
-                                       inode->i_sb->s_time_gran);
-               if (ia_valid & ATTR_MODE) {
-                       umode_t mode = iattr->ia_mode;
-
-                       if (!in_group_p(inode->i_gid) && !capable(CAP_FSETID))
-                               mode &= ~S_ISGID;
-                       iattrs->ia_mode = sd->s_mode = mode;
-               }
+       }
+       iattrs = &sd_attrs->ia_iattr;
+
+       if (ia_valid & ATTR_UID)
+               iattrs->ia_uid = iattr->ia_uid;
+       if (ia_valid & ATTR_GID)
+               iattrs->ia_gid = iattr->ia_gid;
+       if (ia_valid & ATTR_ATIME)
+               iattrs->ia_atime = timespec_trunc(iattr->ia_atime,
+                               inode->i_sb->s_time_gran);
+       if (ia_valid & ATTR_MTIME)
+               iattrs->ia_mtime = timespec_trunc(iattr->ia_mtime,
+                               inode->i_sb->s_time_gran);
+       if (ia_valid & ATTR_CTIME)
+               iattrs->ia_ctime = timespec_trunc(iattr->ia_ctime,
+                               inode->i_sb->s_time_gran);
+       if (ia_valid & ATTR_MODE) {
+               umode_t mode = iattr->ia_mode;
+
+               if (!in_group_p(inode->i_gid) && !capable(CAP_FSETID))
+                       mode &= ~S_ISGID;
+               iattrs->ia_mode = sd->s_mode = mode;
        }
        return error;
 }