From: Miklos Szeredi fuse_copy_finish() must be called before request_end(), since the later might sleep, and no sleeping is allowed between fuse_copy_one() and fuse_copy_finish() because of kmap_atomic()/kunmap_atomic() used in them. Signed-off-by: Miklos Szeredi Signed-off-by: Andrew Morton --- fs/fuse/dev.c | 4 +++- 1 files changed, 3 insertions(+), 1 deletion(-) diff -puN fs/fuse/dev.c~fuse-fuse_copy_finish-order-fix fs/fuse/dev.c --- 25/fs/fuse/dev.c~fuse-fuse_copy_finish-order-fix Fri Jan 13 17:35:35 2006 +++ 25-akpm/fs/fuse/dev.c Fri Jan 13 17:35:35 2006 @@ -773,8 +773,10 @@ static ssize_t fuse_dev_writev(struct fi list_del_init(&req->list); if (req->interrupted) { - request_end(fc, req); + spin_unlock(&fuse_lock); fuse_copy_finish(&cs); + spin_lock(&fuse_lock); + request_end(fc, req); return -ENOENT; } req->out.h = oh; _