aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/file.c13
-rw-r--r--kernel/inode.c3
2 files changed, 11 insertions, 5 deletions
diff --git a/kernel/file.c b/kernel/file.c
index 63e4380..f5e2c87 100644
--- a/kernel/file.c
+++ b/kernel/file.c
@@ -248,6 +248,8 @@ static int fuse_readpage(struct file *file, struct page *page)
fuse_put_request(fc, req);
if (!err)
SetPageUptodate(page);
+ if (!(inode->i_sb->s_flags & MS_NOATIME))
+ fuse_invalidate_attr(inode);
out:
unlock_page(page);
return err;
@@ -268,6 +270,8 @@ static int fuse_send_readpages(struct fuse_req *req, struct file *file,
SetPageUptodate(page);
unlock_page(page);
}
+ if (!(inode->i_sb->s_flags & MS_NOATIME))
+ fuse_invalidate_attr(inode);
return req->out.h.error;
}
@@ -484,8 +488,8 @@ static int fuse_commit_write(struct file *file, struct page *page,
clear_page_dirty(page);
SetPageUptodate(page);
}
- } else if (err == -EINTR || err == -EIO)
- fuse_invalidate_attr(inode);
+ }
+ fuse_invalidate_attr(inode);
return err;
}
@@ -577,7 +581,8 @@ static ssize_t fuse_direct_io(struct file *file, const char __user *buf,
if (write && pos > i_size_read(inode))
i_size_write(inode, pos);
*ppos = pos;
- } else if (write && (res == -EINTR || res == -EIO))
+ }
+ if (write || !(inode->i_sb->s_flags & MS_NOATIME))
fuse_invalidate_attr(inode);
return res;
@@ -642,7 +647,7 @@ static int fuse_set_page_dirty(struct page *page)
static struct file_operations fuse_file_operations = {
.llseek = generic_file_llseek,
#ifdef KERNEL_2_6
- .read = generic_file_read,
+ .read = generic_file_read,
#else
.read = fuse_file_read,
#endif
diff --git a/kernel/inode.c b/kernel/inode.c
index 5dacb22..7717ef1 100644
--- a/kernel/inode.c
+++ b/kernel/inode.c
@@ -199,6 +199,7 @@ struct inode *fuse_iget(struct super_block *sb, unsigned long nodeid,
return NULL;
if ((inode->i_state & I_NEW)) {
+ inode->i_flags |= S_NOATIME|S_NOCMTIME;
inode->i_generation = generation;
inode->i_data.backing_dev_info = &fc->bdi;
fuse_init_inode(inode, attr);
@@ -424,7 +425,7 @@ static int parse_fuse_opt(char *opt, struct fuse_mount_data *d)
return 0;
}
}
-
+
if (!d->fd_present || !d->rootmode_present ||
!d->user_id_present || !d->group_id_present)
return 0;