diff options
author | Miklos Szeredi <mszeredi@suse.cz> | 2008-04-30 03:54:43 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-04-30 11:29:50 -0400 |
commit | 5c5c5e51b26413d50a9efae2ca7d6c5c6cd453ac (patch) | |
tree | 4f78209ad05e429a0b89658e495fca9b9262d81d /fs/fuse/fuse_i.h | |
parent | ea9b9907b82a09bd1a708004454f7065de77c5b0 (diff) |
fuse: update file size on short read
If the READ request returned a short count, then either
- cached size is incorrect
- filesystem is buggy, as short reads are only allowed on EOF
So assume that the size is wrong and refresh it, so that cached read() doesn't
zero fill the missing chunk.
Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'fs/fuse/fuse_i.h')
-rw-r--r-- | fs/fuse/fuse_i.h | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/fs/fuse/fuse_i.h b/fs/fuse/fuse_i.h index 4b094fbc9c7f..934dd819a4ef 100644 --- a/fs/fuse/fuse_i.h +++ b/fs/fuse/fuse_i.h | |||
@@ -239,7 +239,10 @@ struct fuse_req { | |||
239 | } release; | 239 | } release; |
240 | struct fuse_init_in init_in; | 240 | struct fuse_init_in init_in; |
241 | struct fuse_init_out init_out; | 241 | struct fuse_init_out init_out; |
242 | struct fuse_read_in read_in; | 242 | struct { |
243 | struct fuse_read_in in; | ||
244 | u64 attr_ver; | ||
245 | } read; | ||
243 | struct { | 246 | struct { |
244 | struct fuse_write_in in; | 247 | struct fuse_write_in in; |
245 | struct fuse_write_out out; | 248 | struct fuse_write_out out; |
@@ -637,3 +640,5 @@ void fuse_flush_writepages(struct inode *inode); | |||
637 | 640 | ||
638 | void fuse_set_nowrite(struct inode *inode); | 641 | void fuse_set_nowrite(struct inode *inode); |
639 | void fuse_release_nowrite(struct inode *inode); | 642 | void fuse_release_nowrite(struct inode *inode); |
643 | |||
644 | u64 fuse_get_attr_version(struct fuse_conn *fc); | ||