diff options
-rw-r--r-- | fs/attr.c | 5 | ||||
-rw-r--r-- | fs/btrfs/inode.c | 8 | ||||
-rw-r--r-- | fs/ext4/inode.c | 4 |
3 files changed, 10 insertions, 7 deletions
@@ -202,11 +202,6 @@ int notify_change(struct dentry * dentry, struct iattr * attr, struct inode **de | |||
202 | return -EPERM; | 202 | return -EPERM; |
203 | } | 203 | } |
204 | 204 | ||
205 | if ((ia_valid & ATTR_SIZE) && IS_I_VERSION(inode)) { | ||
206 | if (attr->ia_size != inode->i_size) | ||
207 | inode_inc_iversion(inode); | ||
208 | } | ||
209 | |||
210 | if ((ia_valid & ATTR_MODE)) { | 205 | if ((ia_valid & ATTR_MODE)) { |
211 | umode_t amode = attr->ia_mode; | 206 | umode_t amode = attr->ia_mode; |
212 | /* Flag setting protected by i_mutex */ | 207 | /* Flag setting protected by i_mutex */ |
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index f1a77449d032..471a4f7f4044 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c | |||
@@ -4354,8 +4354,12 @@ static int btrfs_setsize(struct inode *inode, struct iattr *attr) | |||
4354 | * these flags set. For all other operations the VFS set these flags | 4354 | * these flags set. For all other operations the VFS set these flags |
4355 | * explicitly if it wants a timestamp update. | 4355 | * explicitly if it wants a timestamp update. |
4356 | */ | 4356 | */ |
4357 | if (newsize != oldsize && (!(mask & (ATTR_CTIME | ATTR_MTIME)))) | 4357 | if (newsize != oldsize) { |
4358 | inode->i_ctime = inode->i_mtime = current_fs_time(inode->i_sb); | 4358 | inode_inc_iversion(inode); |
4359 | if (!(mask & (ATTR_CTIME | ATTR_MTIME))) | ||
4360 | inode->i_ctime = inode->i_mtime = | ||
4361 | current_fs_time(inode->i_sb); | ||
4362 | } | ||
4359 | 4363 | ||
4360 | if (newsize > oldsize) { | 4364 | if (newsize > oldsize) { |
4361 | truncate_pagecache(inode, newsize); | 4365 | truncate_pagecache(inode, newsize); |
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 075763474118..7f0e15ebacd9 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c | |||
@@ -4598,6 +4598,10 @@ int ext4_setattr(struct dentry *dentry, struct iattr *attr) | |||
4598 | if (attr->ia_size > sbi->s_bitmap_maxbytes) | 4598 | if (attr->ia_size > sbi->s_bitmap_maxbytes) |
4599 | return -EFBIG; | 4599 | return -EFBIG; |
4600 | } | 4600 | } |
4601 | |||
4602 | if (IS_I_VERSION(inode) && attr->ia_size != inode->i_size) | ||
4603 | inode_inc_iversion(inode); | ||
4604 | |||
4601 | if (S_ISREG(inode->i_mode) && | 4605 | if (S_ISREG(inode->i_mode) && |
4602 | (attr->ia_size < inode->i_size)) { | 4606 | (attr->ia_size < inode->i_size)) { |
4603 | if (ext4_should_order_data(inode)) { | 4607 | if (ext4_should_order_data(inode)) { |