diff options
Diffstat (limited to 'kernel/file.c')
-rw-r--r-- | kernel/file.c | 9 |
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; } |