aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/file.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/kernel/file.c b/kernel/file.c
index d7b61ea..0b75637 100644
--- a/kernel/file.c
+++ b/kernel/file.c
@@ -480,7 +480,6 @@ static void write_buffer_end(struct fuse_conn *fc, struct fuse_req *req)
req->out.h.error = -EPROTO;
}
- lock_page(page);
if (req->out.h.error) {
SetPageError(page);
if (req->out.h.error == -ENOSPC)
@@ -490,7 +489,6 @@ static void write_buffer_end(struct fuse_conn *fc, struct fuse_req *req)
}
end_page_writeback(page);
kunmap(page);
- unlock_page(page);
fuse_put_request(fc, req);
}
@@ -535,10 +533,11 @@ static int fuse_writepage(struct page *page, struct writeback_control *wbc)
/* FIXME: check sync_mode, and wait for previous writes (or
signal userspace to do this) */
if (wbc->nonblocking) {
+ SetPageWriteback(page);
err = write_buffer_nonblock(inode, page, 0, count);
- if (!err)
- SetPageWriteback(page);
- else if (err == -EWOULDBLOCK) {
+ if (err)
+ ClearPageWriteback(page);
+ if (err == -EWOULDBLOCK) {
__set_page_dirty_nobuffers(page);
err = 0;
}