https://github.com/torvalds/linux
Revision 3c46f3d6406b1d0c53575774b2d1fd013cd7f76f authored by Linus Torvalds on 02 December 2012, 01:55:13 UTC, committed by Linus Torvalds on 02 December 2012, 01:55:13 UTC
Pull  late workqueue fixes from Tejun Heo:
 "Unfortunately, I have two really late fixes.  One was for a
  long-standing bug and queued for 3.8 but I found out about a
  regression introduced during 3.7-rc1 two days ago, so I'm sending out
  the two fixes together.

  The first (long-standing) one is rescuer_thread() entering exit path
  w/ TASK_INTERRUPTIBLE.  It only triggers on workqueue destructions
  which isn't very frequent and the exit path can usually survive being
  called with TASK_INTERRUPT, so it was hidden pretty well.  Apparently,
  if you're reiserfs, this could lead to the exiting kthread sleeping
  indefinitely holding a mutex, which is never good.

  The fix is simple - restoring TASK_RUNNING before returning from the
  kthread function.

  The second one is introduced by the new mod_delayed_work().
  mod_delayed_work() was missing special case handling for 0 delay.
  Instead of queueing the work item immediately, it queued the timer
  which expires on the closest next tick.  Some users of the new
  function converted from "[__]cancel_delayed_work() +
  queue_delayed_work()" combination became unhappy with the extra delay.

  Block unplugging led to noticeably higher number of context switches
  and intel 6250 wireless failed to associate with WPA-Enterprise
  network.  The fix, again, is fairly simple.  The 0 delay special case
  logic from queue_delayed_work_on() should be moved to
  __queue_delayed_work() which is shared by both queue_delayed_work_on()
  and mod_delayed_work_on().

  The first one is difficult to trigger and the failure mode for the
  latter isn't completely catastrophic, so missing these two for 3.7
  wouldn't make it a disastrous release, but both bugs are nasty and the
  fixes are fairly safe"

* 'for-3.7-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq:
  workqueue: mod_delayed_work_on() shouldn't queue timer on 0 delay
  workqueue: exit rescuer_thread() as TASK_RUNNING
2 parent s 331fee3 + 8852aac
History
Tip revision: 3c46f3d6406b1d0c53575774b2d1fd013cd7f76f authored by Linus Torvalds on 02 December 2012, 01:55:13 UTC
Merge branch 'for-3.7-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq
Tip revision: 3c46f3d
File Mode Size
Kconfig -rw-r--r-- 3.0 KB
Makefile -rw-r--r-- 587 bytes
associola.c -rw-r--r-- 47.0 KB
auth.c -rw-r--r-- 24.2 KB
bind_addr.c -rw-r--r-- 14.1 KB
chunk.c -rw-r--r-- 9.8 KB
command.c -rw-r--r-- 2.3 KB
debug.c -rw-r--r-- 4.6 KB
endpointola.c -rw-r--r-- 13.4 KB
input.c -rw-r--r-- 31.6 KB
inqueue.c -rw-r--r-- 7.0 KB
ipv6.c -rw-r--r-- 28.9 KB
objcnt.c -rw-r--r-- 4.3 KB
output.c -rw-r--r-- 22.9 KB
outqueue.c -rw-r--r-- 55.0 KB
primitive.c -rw-r--r-- 7.6 KB
probe.c -rw-r--r-- 5.2 KB
proc.c -rw-r--r-- 14.2 KB
protocol.c -rw-r--r-- 41.5 KB
sm_make_chunk.c -rw-r--r-- 101.0 KB
sm_sideeffect.c -rw-r--r-- 49.1 KB
sm_statefuns.c -rw-r--r-- 196.5 KB
sm_statetable.c -rw-r--r-- 31.5 KB
socket.c -rw-r--r-- 198.1 KB
ssnmap.c -rw-r--r-- 3.5 KB
sysctl.c -rw-r--r-- 8.2 KB
transport.c -rw-r--r-- 19.9 KB
tsnmap.c -rw-r--r-- 9.8 KB
ulpevent.c -rw-r--r-- 30.6 KB
ulpqueue.c -rw-r--r-- 27.9 KB

back to top