diff options
Diffstat (limited to 'fs/sysfs/inode.c')
-rw-r--r-- | fs/sysfs/inode.c | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/fs/sysfs/inode.c b/fs/sysfs/inode.c index eb53c632f856..80f8fd4b2f92 100644 --- a/fs/sysfs/inode.c +++ b/fs/sysfs/inode.c @@ -42,10 +42,9 @@ int __init sysfs_inode_init(void) return bdi_init(&sysfs_backing_dev_info); } -int sysfs_setattr(struct dentry * dentry, struct iattr * iattr) +int sysfs_sd_setattr(struct sysfs_dirent *sd, struct inode *inode, + struct iattr * iattr) { - struct inode * inode = dentry->d_inode; - struct sysfs_dirent * sd = dentry->d_fsdata; struct iattr * sd_iattr; unsigned int ia_valid = iattr->ia_valid; int error; @@ -55,10 +54,6 @@ int sysfs_setattr(struct dentry * dentry, struct iattr * iattr) sd_iattr = sd->s_iattr; - error = inode_change_ok(inode, iattr); - if (error) - return error; - iattr->ia_valid &= ~ATTR_SIZE; /* ignore size changes */ error = inode_setattr(inode, iattr); @@ -104,6 +99,20 @@ int sysfs_setattr(struct dentry * dentry, struct iattr * iattr) return error; } +int sysfs_setattr(struct dentry *dentry, struct iattr *iattr) +{ + struct inode * inode = dentry->d_inode; + struct sysfs_dirent * sd = dentry->d_fsdata; + int error; + + error = inode_change_ok(inode, iattr); + if (error) + return error; + + return sysfs_sd_setattr(sd, inode, iattr); +} + + static inline void set_default_inode_attr(struct inode * inode, mode_t mode) { inode->i_mode = mode; |