diff options
Diffstat (limited to 'fs/fuse/inode.c')
-rw-r--r-- | fs/fuse/inode.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c index 0b578598c6ac..a8ce6dab60a0 100644 --- a/fs/fuse/inode.c +++ b/fs/fuse/inode.c | |||
@@ -201,7 +201,8 @@ void fuse_change_attributes(struct inode *inode, struct fuse_attr *attr, | |||
201 | struct timespec old_mtime; | 201 | struct timespec old_mtime; |
202 | 202 | ||
203 | spin_lock(&fc->lock); | 203 | spin_lock(&fc->lock); |
204 | if (attr_version != 0 && fi->attr_version > attr_version) { | 204 | if ((attr_version != 0 && fi->attr_version > attr_version) || |
205 | test_bit(FUSE_I_SIZE_UNSTABLE, &fi->state)) { | ||
205 | spin_unlock(&fc->lock); | 206 | spin_unlock(&fc->lock); |
206 | return; | 207 | return; |
207 | } | 208 | } |
@@ -217,7 +218,7 @@ void fuse_change_attributes(struct inode *inode, struct fuse_attr *attr, | |||
217 | bool inval = false; | 218 | bool inval = false; |
218 | 219 | ||
219 | if (oldsize != attr->size) { | 220 | if (oldsize != attr->size) { |
220 | truncate_pagecache(inode, oldsize, attr->size); | 221 | truncate_pagecache(inode, attr->size); |
221 | inval = true; | 222 | inval = true; |
222 | } else if (fc->auto_inval_data) { | 223 | } else if (fc->auto_inval_data) { |
223 | struct timespec new_mtime = { | 224 | struct timespec new_mtime = { |
@@ -929,7 +930,7 @@ static int fuse_bdi_init(struct fuse_conn *fc, struct super_block *sb) | |||
929 | fc->bdi.name = "fuse"; | 930 | fc->bdi.name = "fuse"; |
930 | fc->bdi.ra_pages = (VM_MAX_READAHEAD * 1024) / PAGE_CACHE_SIZE; | 931 | fc->bdi.ra_pages = (VM_MAX_READAHEAD * 1024) / PAGE_CACHE_SIZE; |
931 | /* fuse does it's own writeback accounting */ | 932 | /* fuse does it's own writeback accounting */ |
932 | fc->bdi.capabilities = BDI_CAP_NO_ACCT_WB; | 933 | fc->bdi.capabilities = BDI_CAP_NO_ACCT_WB | BDI_CAP_STRICTLIMIT; |
933 | 934 | ||
934 | err = bdi_init(&fc->bdi); | 935 | err = bdi_init(&fc->bdi); |
935 | if (err) | 936 | if (err) |