diff options
author | Miklos Szeredi <mszeredi@suse.cz> | 2015-07-01 16:25:56 +0200 |
---|---|---|
committer | Miklos Szeredi <mszeredi@suse.cz> | 2015-07-01 16:25:56 +0200 |
commit | 5437f2417225dc89c785867f4790012668006abc (patch) | |
tree | 8b470061581fd912bce1a8996f6fa433ff24a671 /fs/fuse | |
parent | 73e0e738441b26a2dfc1ccdf1462cd1dc13c8cea (diff) | |
download | op-kernel-dev-5437f2417225dc89c785867f4790012668006abc.zip op-kernel-dev-5437f2417225dc89c785867f4790012668006abc.tar.gz |
fuse: account as waiting before queuing for background
Move accounting of fc->num_waiting to the point where the request actually
starts waiting. This is earlier than the current queue_request() for
background requests, since they might be waiting on the fc->bg_queue before
being queued on fc->pending.
Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
Reviewed-by: Ashish Samant <ashish.samant@oracle.com>
Diffstat (limited to 'fs/fuse')
-rw-r--r-- | fs/fuse/dev.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c index 24f1d77..9e0ed3e 100644 --- a/fs/fuse/dev.c +++ b/fs/fuse/dev.c @@ -327,10 +327,6 @@ static void queue_request(struct fuse_conn *fc, struct fuse_req *req) len_args(req->in.numargs, (struct fuse_arg *) req->in.args); list_add_tail(&req->list, &fc->pending); req->state = FUSE_REQ_PENDING; - if (!req->waiting) { - req->waiting = 1; - atomic_inc(&fc->num_waiting); - } wake_up(&fc->waitq); kill_fasync(&fc->fasync, SIGIO, POLL_IN); } @@ -519,6 +515,10 @@ static void __fuse_request_send(struct fuse_conn *fc, struct fuse_req *req) void fuse_request_send(struct fuse_conn *fc, struct fuse_req *req) { req->isreply = 1; + if (!req->waiting) { + req->waiting = 1; + atomic_inc(&fc->num_waiting); + } __fuse_request_send(fc, req); } EXPORT_SYMBOL_GPL(fuse_request_send); @@ -592,6 +592,10 @@ static void fuse_request_send_nowait_locked(struct fuse_conn *fc, struct fuse_req *req) { BUG_ON(!req->background); + if (!req->waiting) { + req->waiting = 1; + atomic_inc(&fc->num_waiting); + } fc->num_background++; if (fc->num_background == fc->max_background) fc->blocked = 1; |