Oleg Nesterov 36aa9dfc39 workqueue: don't clear cwq->thread until it exits
Pointed out by Srivatsa Vaddagiri.

cleanup_workqueue_thread() sets cwq->thread = NULL and does kthread_stop().
This breaks the "if (cwq->thread == current)" logic in flush_cpu_workqueue()
and leads to deadlock.

Kill the thead first, then clear cwq->thread. workqueue_mutex protects us
from create_workqueue_thread() so we don't need cwq->lock.

Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru>
Cc: Srivatsa Vaddagiri <vatsa@in.ibm.com>
Cc: "Pallipadi, Venkatesh" <venkatesh.pallipadi@intel.com>
Cc: Gautham shenoy <ego@in.ibm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2007-05-09 12:30:52 -07:00
..
2007-05-09 12:30:48 -07:00
2006-09-11 13:32:30 -04:00
2007-02-11 10:51:32 -08:00
2007-05-08 11:15:03 -07:00
2007-05-08 11:15:15 -07:00
2006-12-07 08:39:36 -08:00
2007-05-08 11:15:07 -07:00
2006-12-04 02:00:22 -05:00
2006-09-29 09:18:12 -07:00
2005-04-16 15:20:36 -07:00
2007-05-08 11:15:02 -07:00
2006-12-07 08:39:25 -08:00
2006-07-10 13:24:25 -07:00