diff options
Diffstat (limited to 'fs/9p/vfs_inode_dotl.c')
-rw-r--r-- | fs/9p/vfs_inode_dotl.c | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/fs/9p/vfs_inode_dotl.c b/fs/9p/vfs_inode_dotl.c index 327c578c7ba6..0a0ac30d51d6 100644 --- a/fs/9p/vfs_inode_dotl.c +++ b/fs/9p/vfs_inode_dotl.c | |||
@@ -456,12 +456,6 @@ int v9fs_vfs_setattr_dotl(struct dentry *dentry, struct iattr *iattr) | |||
456 | if (IS_ERR(fid)) | 456 | if (IS_ERR(fid)) |
457 | return PTR_ERR(fid); | 457 | return PTR_ERR(fid); |
458 | 458 | ||
459 | if ((iattr->ia_valid & ATTR_SIZE) && | ||
460 | iattr->ia_size != i_size_read(dentry->d_inode)) { | ||
461 | retval = vmtruncate(dentry->d_inode, iattr->ia_size); | ||
462 | if (retval) | ||
463 | return retval; | ||
464 | } | ||
465 | /* Write all dirty data */ | 459 | /* Write all dirty data */ |
466 | if (S_ISREG(dentry->d_inode->i_mode)) | 460 | if (S_ISREG(dentry->d_inode->i_mode)) |
467 | filemap_write_and_wait(dentry->d_inode->i_mapping); | 461 | filemap_write_and_wait(dentry->d_inode->i_mapping); |
@@ -469,8 +463,12 @@ int v9fs_vfs_setattr_dotl(struct dentry *dentry, struct iattr *iattr) | |||
469 | retval = p9_client_setattr(fid, &p9attr); | 463 | retval = p9_client_setattr(fid, &p9attr); |
470 | if (retval < 0) | 464 | if (retval < 0) |
471 | return retval; | 465 | return retval; |
472 | v9fs_invalidate_inode_attr(dentry->d_inode); | ||
473 | 466 | ||
467 | if ((iattr->ia_valid & ATTR_SIZE) && | ||
468 | iattr->ia_size != i_size_read(dentry->d_inode)) | ||
469 | truncate_setsize(dentry->d_inode, iattr->ia_size); | ||
470 | |||
471 | v9fs_invalidate_inode_attr(dentry->d_inode); | ||
474 | setattr_copy(dentry->d_inode, iattr); | 472 | setattr_copy(dentry->d_inode, iattr); |
475 | mark_inode_dirty(dentry->d_inode); | 473 | mark_inode_dirty(dentry->d_inode); |
476 | if (iattr->ia_valid & ATTR_MODE) { | 474 | if (iattr->ia_valid & ATTR_MODE) { |