[3.11.y.z extended stable] Patch "workqueue: fix bugs in wq_update_unbound_numa() failure path" has been added to staging queue

Luis Henriques luis.henriques at canonical.com
Fri May 30 09:28:12 UTC 2014


This is a note to let you know that I have just added a patch titled

    workqueue: fix bugs in wq_update_unbound_numa() failure path

to the linux-3.11.y-queue branch of the 3.11.y.z extended stable tree 
which can be found at:

 http://kernel.ubuntu.com/git?p=ubuntu/linux.git;a=shortlog;h=refs/heads/linux-3.11.y-queue

If you, or anyone else, feels it should not be added to this tree, please 
reply to this email.

For more information about the 3.11.y.z tree, see
https://wiki.ubuntu.com/Kernel/Dev/ExtendedStable

Thanks.
-Luis

------

>From b1453861299a02eb47d586e8b219f80579f1d9cc Mon Sep 17 00:00:00 2001
From: Daeseok Youn <daeseok.youn at gmail.com>
Date: Wed, 16 Apr 2014 14:32:29 +0900
Subject: workqueue: fix bugs in wq_update_unbound_numa() failure path

commit 77f300b198f93328c26191b52655ce1b62e202cf upstream.

wq_update_unbound_numa() failure path has the following two bugs.

- alloc_unbound_pwq() is called without holding wq->mutex; however, if
  the allocation fails, it jumps to out_unlock which tries to unlock
  wq->mutex.

- The function should switch to dfl_pwq on failure but didn't do so
  after alloc_unbound_pwq() failure.

Fix it by regrabbing wq->mutex and jumping to use_dfl_pwq on
alloc_unbound_pwq() failure.

Signed-off-by: Daeseok Youn <daeseok.youn at gmail.com>
Acked-by: Lai Jiangshan <laijs at cn.fujitsu.com>
Signed-off-by: Tejun Heo <tj at kernel.org>
Fixes: 4c16bd327c74 ("workqueue: implement NUMA affinity for unbound workqueues")
Signed-off-by: Luis Henriques <luis.henriques at canonical.com>
---
 kernel/workqueue.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/kernel/workqueue.c b/kernel/workqueue.c
index d06e6e15ac02..a8b0147f3a89 100644
--- a/kernel/workqueue.c
+++ b/kernel/workqueue.c
@@ -4061,7 +4061,8 @@ static void wq_update_unbound_numa(struct workqueue_struct *wq, int cpu,
 	if (!pwq) {
 		pr_warning("workqueue: allocation failed while updating NUMA affinity of \"%s\"\n",
 			   wq->name);
-		goto out_unlock;
+		mutex_lock(&wq->mutex);
+		goto use_dfl_pwq;
 	}

 	/*
--
1.9.1





More information about the kernel-team mailing list