mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
workqueue: Factor out assign_rescuer_work()
Move the code to assign work to rescuer and assign_rescuer_work(). Signed-off-by: Lai Jiangshan <jiangshan.ljs@antgroup.com> Signed-off-by: Tejun Heo <tj@kernel.org>
This commit is contained in:
@@ -3437,6 +3437,23 @@ sleep:
|
||||
goto woke_up;
|
||||
}
|
||||
|
||||
static bool assign_rescuer_work(struct pool_workqueue *pwq, struct worker *rescuer)
|
||||
{
|
||||
struct worker_pool *pool = pwq->pool;
|
||||
struct work_struct *work, *n;
|
||||
|
||||
/*
|
||||
* Slurp in all works issued via this workqueue and
|
||||
* process'em.
|
||||
*/
|
||||
list_for_each_entry_safe(work, n, &pool->worklist, entry) {
|
||||
if (get_work_pwq(work) == pwq && assign_work(work, rescuer, &n))
|
||||
pwq->stats[PWQ_STAT_RESCUED]++;
|
||||
}
|
||||
|
||||
return !list_empty(&rescuer->scheduled);
|
||||
}
|
||||
|
||||
/**
|
||||
* rescuer_thread - the rescuer thread function
|
||||
* @__rescuer: self
|
||||
@@ -3491,7 +3508,6 @@ repeat:
|
||||
struct pool_workqueue *pwq = list_first_entry(&wq->maydays,
|
||||
struct pool_workqueue, mayday_node);
|
||||
struct worker_pool *pool = pwq->pool;
|
||||
struct work_struct *work, *n;
|
||||
|
||||
__set_current_state(TASK_RUNNING);
|
||||
list_del_init(&pwq->mayday_node);
|
||||
@@ -3502,18 +3518,9 @@ repeat:
|
||||
|
||||
raw_spin_lock_irq(&pool->lock);
|
||||
|
||||
/*
|
||||
* Slurp in all works issued via this workqueue and
|
||||
* process'em.
|
||||
*/
|
||||
WARN_ON_ONCE(!list_empty(&rescuer->scheduled));
|
||||
list_for_each_entry_safe(work, n, &pool->worklist, entry) {
|
||||
if (get_work_pwq(work) == pwq &&
|
||||
assign_work(work, rescuer, &n))
|
||||
pwq->stats[PWQ_STAT_RESCUED]++;
|
||||
}
|
||||
|
||||
if (!list_empty(&rescuer->scheduled)) {
|
||||
if (assign_rescuer_work(pwq, rescuer)) {
|
||||
process_scheduled_works(rescuer);
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user