]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
workqueue: Factor out assign_rescuer_work()
authorLai Jiangshan <jiangshan.ljs@antgroup.com>
Fri, 21 Nov 2025 14:57:14 +0000 (22:57 +0800)
committerTejun Heo <tj@kernel.org>
Fri, 21 Nov 2025 19:45:36 +0000 (09:45 -1000)
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>
kernel/workqueue.c

index d9ce3ab0ec2365cd4d10c9c0747c71c33e57b0af..0e5ec6e002b1a7ee52e47211a6203b6797ff89ed 100644 (file)
@@ -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);
 
                        /*