workqueue: use cwq_set_max_active() helper for workqueue_set_max_active()
workqueue_set_max_active() may increase ->max_active without activating delayed works and may make the activation order differ from the queueing order. Both aren't strictly bugs but the resulting behavior could be a bit odd. To make things more consistent, use cwq_set_max_active() helper which immediately makes use of the newly increased max_mactive if there are delayed work items and also keeps the activation order. tj: Slight update to description. Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com> Signed-off-by: Tejun Heo <tj@kernel.org>
This commit is contained in:
parent
9f4bd4cddb
commit
70369b117a
|
@ -3413,7 +3413,7 @@ void workqueue_set_max_active(struct workqueue_struct *wq, int max_active)
|
||||||
|
|
||||||
if (!(wq->flags & WQ_FREEZABLE) ||
|
if (!(wq->flags & WQ_FREEZABLE) ||
|
||||||
!(gcwq->flags & GCWQ_FREEZING))
|
!(gcwq->flags & GCWQ_FREEZING))
|
||||||
get_cwq(gcwq->cpu, wq)->max_active = max_active;
|
cwq_set_max_active(get_cwq(gcwq->cpu, wq), max_active);
|
||||||
|
|
||||||
spin_unlock_irq(&gcwq->lock);
|
spin_unlock_irq(&gcwq->lock);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue