Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d313dd85 authored by Tejun Heo's avatar Tejun Heo
Browse files

workqueue: fix worker management invocation without pending works



When there's no pending work to do, worker_thread() goes back to sleep
after waking up without checking whether worker management is
necessary.  This means that idle worker exit requests can be ignored
if the gcwq stays empty.

Fix it by making worker_thread() always check whether worker
management is necessary before going to sleep.

Signed-off-by: default avatarTejun Heo <tj@kernel.org>
parent a1e453d2
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -1832,10 +1832,10 @@ recheck:
	} while (keep_working(gcwq));

	worker_set_flags(worker, WORKER_PREP, false);

sleep:
	if (unlikely(need_to_manage_workers(gcwq)) && manage_workers(worker))
		goto recheck;
sleep:

	/*
	 * gcwq->lock is held and there's no work to process and no
	 * need to manage, sleep.  Workers are woken up only while