diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-05-14 09:06:29 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-05-14 09:06:29 -0700 | 
| commit | 7fb30d2b606beb78cda805647faf4d3cdfb39c42 (patch) | |
| tree | bdc82e9f3bc812dceb87d59108031eeab860cf2f | |
| parent | a2c7a54fcc36dc3d0d461e883d9535f8f52f5a3f (diff) | |
| parent | d3251859168b0b12841e1b90d6d768ab478dc23d (diff) | |
| download | olio-linux-3.10-7fb30d2b606beb78cda805647faf4d3cdfb39c42.tar.xz olio-linux-3.10-7fb30d2b606beb78cda805647faf4d3cdfb39c42.zip  | |
Merge branch 'for-3.10-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq
Pull workqueue fix from Tejun Heo:
 "A fix for a workqueue_congested() regression that broke fscache"
* 'for-3.10-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq:
  workqueue: workqueue_congested() shouldn't translate WORK_CPU_UNBOUND into node number
| -rw-r--r-- | kernel/workqueue.c | 9 | 
1 files changed, 9 insertions, 0 deletions
diff --git a/kernel/workqueue.c b/kernel/workqueue.c index 4aa9f5bc6b2..1ae602809ef 100644 --- a/kernel/workqueue.c +++ b/kernel/workqueue.c @@ -4311,6 +4311,12 @@ bool current_is_workqueue_rescuer(void)   * no synchronization around this function and the test result is   * unreliable and only useful as advisory hints or for debugging.   * + * If @cpu is WORK_CPU_UNBOUND, the test is performed on the local CPU. + * Note that both per-cpu and unbound workqueues may be associated with + * multiple pool_workqueues which have separate congested states.  A + * workqueue being congested on one CPU doesn't mean the workqueue is also + * contested on other CPUs / NUMA nodes. + *   * RETURNS:   * %true if congested, %false otherwise.   */ @@ -4321,6 +4327,9 @@ bool workqueue_congested(int cpu, struct workqueue_struct *wq)  	rcu_read_lock_sched(); +	if (cpu == WORK_CPU_UNBOUND) +		cpu = smp_processor_id(); +  	if (!(wq->flags & WQ_UNBOUND))  		pwq = per_cpu_ptr(wq->cpu_pwqs, cpu);  	else  |