diff options
Diffstat (limited to 'fs/logfs/file.c')
-rw-r--r-- | fs/logfs/file.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/fs/logfs/file.c b/fs/logfs/file.c index abe1cafbd4c2..23b4d03bbd26 100644 --- a/fs/logfs/file.c +++ b/fs/logfs/file.c | |||
@@ -232,15 +232,19 @@ static int logfs_setattr(struct dentry *dentry, struct iattr *attr) | |||
232 | struct inode *inode = dentry->d_inode; | 232 | struct inode *inode = dentry->d_inode; |
233 | int err = 0; | 233 | int err = 0; |
234 | 234 | ||
235 | if (attr->ia_valid & ATTR_SIZE) | 235 | if (attr->ia_valid & ATTR_SIZE) { |
236 | err = logfs_truncate(inode, attr->ia_size); | 236 | err = logfs_truncate(inode, attr->ia_size); |
237 | attr->ia_valid &= ~ATTR_SIZE; | 237 | if (err) |
238 | return err; | ||
239 | } | ||
238 | 240 | ||
239 | if (!err) | 241 | err = inode_change_ok(inode, attr); |
240 | err = inode_change_ok(inode, attr); | 242 | if (err) |
241 | if (!err) | 243 | return err; |
242 | err = inode_setattr(inode, attr); | 244 | |
243 | return err; | 245 | setattr_copy(inode, attr); |
246 | mark_inode_dirty(inode); | ||
247 | return 0; | ||
244 | } | 248 | } |
245 | 249 | ||
246 | const struct inode_operations logfs_reg_iops = { | 250 | const struct inode_operations logfs_reg_iops = { |