Revert "sysfs: Fix sysfs owner and group."
authorArve Hjønnevåg <arve@android.com>
Thu, 11 Mar 2010 00:38:13 +0000 (16:38 -0800)
committerArve Hjønnevåg <arve@android.com>
Thu, 11 Mar 2010 00:38:13 +0000 (16:38 -0800)
This reverts commit f1f8e7cd6f796b15ed011361f09b57db796d9b4e.

fs/sysfs/inode.c

index 753018af451f9e8dcb202f4a7bcb88113f4ec145..e28cecf179f50d6c746312baac37b045a326d5da 100644 (file)
@@ -94,28 +94,30 @@ int sysfs_setattr(struct dentry * dentry, struct iattr * iattr)
                if (!sd_attrs)
                        return -ENOMEM;
                sd->s_iattr = sd_attrs;
-       }
-       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;
+       } 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;
+               }
        }
        return error;
 }