aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/file.c
diff options
context:
space:
mode:
authorMiklos Szeredi <miklos@szeredi.hu>2004-12-13 15:22:28 +0000
committerMiklos Szeredi <miklos@szeredi.hu>2004-12-13 15:22:28 +0000
commit0fcfa039c1dfb7cf9d9da132972334e33f320dd1 (patch)
treea825d1176d07fe68074cbd835c4934ba67cb72ea /kernel/file.c
parente56818b231a231a48e2616ec083999a14516a4ae (diff)
downloadlibfuse-0fcfa039c1dfb7cf9d9da132972334e33f320dd1.tar.gz
fix
Diffstat (limited to 'kernel/file.c')
-rw-r--r--kernel/file.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/kernel/file.c b/kernel/file.c
index 6758c2b..aa02651 100644
--- a/kernel/file.c
+++ b/kernel/file.c
@@ -443,6 +443,7 @@ static int fuse_commit_write(struct file *file, struct page *page,
req->page_offset = offset;
nres = fuse_send_write(req, file, inode, pos, count);
err = req->out.h.error;
+ fuse_put_request(fc, req);
if (!err && nres != count)
err = -EIO;
if (!err) {
@@ -454,8 +455,8 @@ static int fuse_commit_write(struct file *file, struct page *page,
clear_page_dirty(page);
SetPageUptodate(page);
}
- }
- fuse_put_request(fc, req);
+ } else if (err == -EINTR || err == -EIO)
+ fuse_invalidate_attr(inode);
return err;
}
@@ -543,7 +544,9 @@ 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))
+ fuse_invalidate_attr(inode);
+
return res;
}