diff options
author | Miklos Szeredi <miklos@szeredi.hu> | 2004-12-13 15:22:28 +0000 |
---|---|---|
committer | Miklos Szeredi <miklos@szeredi.hu> | 2004-12-13 15:22:28 +0000 |
commit | 0fcfa039c1dfb7cf9d9da132972334e33f320dd1 (patch) | |
tree | a825d1176d07fe68074cbd835c4934ba67cb72ea /kernel/file.c | |
parent | e56818b231a231a48e2616ec083999a14516a4ae (diff) | |
download | libfuse-0fcfa039c1dfb7cf9d9da132972334e33f320dd1.tar.gz |
fix
Diffstat (limited to 'kernel/file.c')
-rw-r--r-- | kernel/file.c | 9 |
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; } |