aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/file.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/file.c')
-rw-r--r--kernel/file.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/kernel/file.c b/kernel/file.c
index 6f941ad..6cf71f3 100644
--- a/kernel/file.c
+++ b/kernel/file.c
@@ -495,11 +495,10 @@ static int fuse_commit_write(struct file *file, struct page *page,
err = -EIO;
if (!err) {
pos += count;
- if (pos > i_size_read(inode)) {
- spin_lock(&fc->lock);
+ spin_lock(&fc->lock);
+ if (pos > inode->i_size)
i_size_write(inode, pos);
- spin_unlock(&fc->lock);
- }
+ spin_unlock(&fc->lock);
if (offset == 0 && to == PAGE_CACHE_SIZE) {
clear_page_dirty(page);
@@ -604,9 +603,10 @@ static ssize_t fuse_direct_io(struct file *file, const char __user *buf,
}
fuse_put_request(fc, req);
if (res > 0) {
- if (write && pos > i_size_read(inode)) {
+ if (write) {
spin_lock(&fc->lock);
- i_size_write(inode, pos);
+ if (pos > inode->i_size)
+ i_size_write(inode, pos);
spin_unlock(&fc->lock);
}
*ppos = pos;