[PATCH] fuse: don't update file times
Don't change mtime/ctime/atime to local time on read/write. Rather invalidate
file attributes, so next stat() will force a GETATTR call. Bug reported by
Ben Grimm.
Signed-off-by: Miklos Szeredi <miklos@szeredi.hu>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
diff --git a/fs/fuse/file.c b/fs/fuse/file.c
index a8dc885..6dcae74 100644
--- a/fs/fuse/file.c
+++ b/fs/fuse/file.c
@@ -244,6 +244,7 @@
fuse_put_request(fc, req);
if (!err)
SetPageUptodate(page);
+ fuse_invalidate_attr(inode); /* atime changed */
out:
unlock_page(page);
return err;
@@ -312,6 +313,7 @@
if (!err && data.req->num_pages)
err = fuse_send_readpages(data.req, file, inode);
fuse_put_request(fc, data.req);
+ fuse_invalidate_attr(inode); /* atime changed */
return err;
}
@@ -380,8 +382,8 @@
clear_page_dirty(page);
SetPageUptodate(page);
}
- } else if (err == -EINTR || err == -EIO)
- fuse_invalidate_attr(inode);
+ }
+ fuse_invalidate_attr(inode);
return err;
}
@@ -473,8 +475,8 @@
if (write && pos > i_size_read(inode))
i_size_write(inode, pos);
*ppos = pos;
- } else if (write && (res == -EINTR || res == -EIO))
- fuse_invalidate_attr(inode);
+ }
+ fuse_invalidate_attr(inode);
return res;
}