diff options
Diffstat (limited to 'fs/libfs.c')
-rw-r--r-- | fs/libfs.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/fs/libfs.c b/fs/libfs.c index 861a8879771..40562224b71 100644 --- a/fs/libfs.c +++ b/fs/libfs.c @@ -370,21 +370,26 @@ int simple_setsize(struct inode *inode, loff_t newsize) EXPORT_SYMBOL(simple_setsize); /** - * simple_setattr - setattr for simple in-memory filesystem + * simple_setattr - setattr for simple filesystem * @dentry: dentry * @iattr: iattr structure * * Returns 0 on success, -error on failure. * - * simple_setattr implements setattr for an in-memory filesystem which - * does not store its own file data or metadata (eg. uses the page cache - * and inode cache as its data store). + * simple_setattr is a simple ->setattr implementation without a proper + * implementation of size changes. + * + * It can either be used for in-memory filesystems or special files + * on simple regular filesystems. Anything that needs to change on-disk + * or wire state on size changes needs its own setattr method. */ int simple_setattr(struct dentry *dentry, struct iattr *iattr) { struct inode *inode = dentry->d_inode; int error; + WARN_ON_ONCE(inode->i_op->truncate); + error = inode_change_ok(inode, iattr); if (error) return error; @@ -396,7 +401,8 @@ int simple_setattr(struct dentry *dentry, struct iattr *iattr) } setattr_copy(inode, iattr); - return error; + mark_inode_dirty(inode); + return 0; } EXPORT_SYMBOL(simple_setattr); |