Skip to content

Commit

Permalink
fix setattr error handling in sysfs, configfs
Browse files Browse the repository at this point in the history
sysfs and configfs setattr functions have error cases after the generic inode's
attributes have been changed. Fix consistency by changing the generic inode
attributes only when it is guaranteed to succeed.

Signed-off-by: Nick Piggin <npiggin@suse.de>
Acked-by: Joel Becker <joel.becker@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
Nick Piggin authored and Greg Kroah-Hartman committed Jun 4, 2010
1 parent 743db2d commit 75de46b
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 7 deletions.
9 changes: 4 additions & 5 deletions fs/configfs/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -72,10 +72,6 @@ int configfs_setattr(struct dentry * dentry, struct iattr * iattr)
if (!sd)
return -EINVAL;

error = simple_setattr(dentry, iattr);
if (error)
return error;

sd_iattr = sd->s_iattr;
if (!sd_iattr) {
/* setting attributes for the first time, allocate now */
Expand All @@ -89,9 +85,12 @@ int configfs_setattr(struct dentry * dentry, struct iattr * iattr)
sd_iattr->ia_atime = sd_iattr->ia_mtime = sd_iattr->ia_ctime = CURRENT_TIME;
sd->s_iattr = sd_iattr;
}

/* attributes were changed atleast once in past */

error = simple_setattr(dentry, iattr);
if (error)
return error;

if (ia_valid & ATTR_UID)
sd_iattr->ia_uid = iattr->ia_uid;
if (ia_valid & ATTR_GID)
Expand Down
6 changes: 4 additions & 2 deletions fs/sysfs/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -117,11 +117,13 @@ int sysfs_setattr(struct dentry *dentry, struct iattr *iattr)
if (error)
goto out;

error = sysfs_sd_setattr(sd, iattr);
if (error)
goto out;

/* this ignores size changes */
generic_setattr(inode, iattr);

error = sysfs_sd_setattr(sd, iattr);

out:
mutex_unlock(&sysfs_mutex);
return error;
Expand Down

0 comments on commit 75de46b

Please sign in to comment.