diff options
Diffstat (limited to 'fs/exofs/inode.c')
-rw-r--r-- | fs/exofs/inode.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/fs/exofs/inode.c b/fs/exofs/inode.c index 4bb6ef822e46..4bfc1f4fd013 100644 --- a/fs/exofs/inode.c +++ b/fs/exofs/inode.c | |||
@@ -887,8 +887,18 @@ int exofs_setattr(struct dentry *dentry, struct iattr *iattr) | |||
887 | if (error) | 887 | if (error) |
888 | return error; | 888 | return error; |
889 | 889 | ||
890 | error = inode_setattr(inode, iattr); | 890 | if ((iattr->ia_valid & ATTR_SIZE) && |
891 | return error; | 891 | iattr->ia_size != i_size_read(inode)) { |
892 | int error; | ||
893 | |||
894 | error = vmtruncate(inode, iattr->ia_size); | ||
895 | if (error) | ||
896 | return error; | ||
897 | } | ||
898 | |||
899 | setattr_copy(inode, iattr); | ||
900 | mark_inode_dirty(inode); | ||
901 | return 0; | ||
892 | } | 902 | } |
893 | 903 | ||
894 | static const struct osd_attr g_attr_inode_file_layout = ATTR_DEF( | 904 | static const struct osd_attr g_attr_inode_file_layout = ATTR_DEF( |