summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPavel Begunkov <asml.silence@gmail.com>2020-03-14 00:31:03 +0300
committerJens Axboe <axboe@kernel.dk>2020-03-15 02:02:26 +0300
commitd78298e73a3443a3c1766fa89f5370f52a4efd94 (patch)
tree6b2d9b5433a7fa4fd26470cce37892b01337153b
parent2293b4195800f88de2c454a24b25874be56d87f3 (diff)
downloadlinux-d78298e73a3443a3c1766fa89f5370f52a4efd94.tar.xz
io-wq: don't resched if there is no work
This little tweak restores the behaviour that was before the recent io_worker_handle_work() optimisation patches. It makes the function do cond_resched() and flush_signals() only if there is an actual work to execute. Signed-off-by: Pavel Begunkov <asml.silence@gmail.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r--fs/io-wq.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/fs/io-wq.c b/fs/io-wq.c
index 0e7c6277afcb..8afe5565f57a 100644
--- a/fs/io-wq.c
+++ b/fs/io-wq.c
@@ -458,10 +458,12 @@ static void io_impersonate_work(struct io_worker *worker,
static void io_assign_current_work(struct io_worker *worker,
struct io_wq_work *work)
{
- /* flush pending signals before assigning new work */
- if (signal_pending(current))
- flush_signals(current);
- cond_resched();
+ if (work) {
+ /* flush pending signals before assigning new work */
+ if (signal_pending(current))
+ flush_signals(current);
+ cond_resched();
+ }
spin_lock_irq(&worker->lock);
worker->cur_work = work;