From 5e0fed717a383ce6e894334cffe7a2acc9dc17b9 Mon Sep 17 00:00:00 2001 From: Kirill Tkhai Date: Thu, 8 Nov 2018 12:05:31 +0300 Subject: [PATCH] fuse: Wake up req->waitq of only if not background Currently, we wait on req->waitq in request_wait_answer() function only, and it's never used for background requests. Since wake_up() is not a light-weight macros, instead of this, it unfolds in really called function, which makes locking operations taking some cpu cycles, let's avoid its call for the case we definitely know it's completely useless. Signed-off-by: Kirill Tkhai Signed-off-by: Miklos Szeredi --- fs/fuse/dev.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c index 74171d5..0a69656 100644 --- a/fs/fuse/dev.c +++ b/fs/fuse/dev.c @@ -468,8 +468,11 @@ static void request_end(struct fuse_conn *fc, struct fuse_req *req) fc->active_background--; flush_bg_queue(fc); spin_unlock(&fc->bg_lock); + } else { + /* Wake up waiter sleeping in request_wait_answer() */ + wake_up(&req->waitq); } - wake_up(&req->waitq); + if (req->end) req->end(fc, req); put_request: -- 2.7.4