linux-uconsole/drivers/usb/storage
Alan Stern 721eaa34e5 usb-storage: fix freezing of the scanning thread
commit bb94a40668 upstream.

This patch (as1521b) fixes the interaction between usb-storage's
scanning thread and the freezer.  The current implementation has a
race: If the device is unplugged shortly after being plugged in and
just as a system sleep begins, the scanning thread may get frozen
before the khubd task.  Khubd won't be able to freeze until the
disconnect processing is complete, and the disconnect processing can't
proceed until the scanning thread finishes, so the sleep transition
will fail.

The implementation in the 3.2 kernel suffers from an additional
problem.  There the scanning thread calls set_freezable_with_signal(),
and the signals sent by the freezer will mess up the thread's I/O
delays, which are all interruptible.

The solution to both problems is the same: Replace the kernel thread
used for scanning with a delayed-work routine on the system freezable
work queue.  Freezable work queues have the nice property that you can
cancel a work item even while the work queue is frozen, and no signals
are needed.

The 3.2 version of this patch solves the problem in Bugzilla #42730.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Acked-by: Seth Forshee <seth.forshee@canonical.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2012-02-29 16:34:27 -08:00
..
alauda.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
cypress_atacb.c
datafab.c
debug.c
debug.h
ene_ub6250.c treewide: cleanup continuations and remove logging message whitespace 2011-04-26 10:24:37 +02:00
freecom.c usb: storage: freecom: Fixed several coding style issues. 2010-08-10 14:35:39 -07:00
initializers.c
initializers.h
isd200.c [SCSI] usb-storage: do not increment cmd->serial_number 2011-05-01 10:23:09 -05:00
jumpshot.c
karma.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
Kconfig Merge branch 'staging-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging-2.6 2011-03-16 15:19:35 -07:00
libusual.c
Makefile Merge branch 'staging-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging-2.6 2011-03-16 15:19:35 -07:00
onetouch.c USB: rename usb_buffer_alloc() and usb_buffer_free() users 2010-05-20 13:21:38 -07:00
option_ms.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
option_ms.h
protocol.c usb-storage: Accept 8020i-protocol commands longer than 12 bytes 2011-11-26 09:10:03 -08:00
protocol.h
realtek_cr.c usb_storage: realtek_cr patch: add const modifier 2011-02-17 10:53:26 -08:00
scsiglue.c Fix common misspellings 2011-03-31 11:26:23 -03:00
scsiglue.h
sddr09.c USB: storage: Use USB_ prefix instead of US_ prefix 2010-10-22 10:21:49 -07:00
sddr55.c
shuttle_usbat.c Fix common misspellings 2011-03-31 11:26:23 -03:00
sierra_ms.c USB: Remove delay_t unused variable from sierra_ms.c driver initialisation code 2011-03-02 19:52:29 -05:00
sierra_ms.h
transport.c USB: storage: Use normalized sense when emulating autosense 2011-11-11 09:35:35 -08:00
transport.h
uas.c Merge branch 'usb-next' into musb-merge 2010-12-16 10:05:06 -08:00
unusual_alauda.h USB: storage: Use USB_ prefix instead of US_ prefix 2010-10-22 10:21:49 -07:00
unusual_cypress.h USB: usb-storage: unusual_devs update for Cypress ATACB 2011-01-22 18:31:26 -08:00
unusual_datafab.h USB: storage: Use USB_ prefix instead of US_ prefix 2010-10-22 10:21:49 -07:00
unusual_devs.h USB: usb-storage: unusual_devs entry for Kingston DT 101 G2 2011-12-09 08:52:42 -08:00
unusual_ene_ub6250.h Staging: Merge ENE UB6250 SD card codes from keucr to drivers/usb/storage 2011-03-07 13:40:59 -08:00
unusual_freecom.h USB: storage: Use USB_ prefix instead of US_ prefix 2010-10-22 10:21:49 -07:00
unusual_isd200.h USB: storage: Use USB_ prefix instead of US_ prefix 2010-10-22 10:21:49 -07:00
unusual_jumpshot.h USB: storage: Use USB_ prefix instead of US_ prefix 2010-10-22 10:21:49 -07:00
unusual_karma.h USB: storage: Use USB_ prefix instead of US_ prefix 2010-10-22 10:21:49 -07:00
unusual_onetouch.h USB: storage: Use USB_ prefix instead of US_ prefix 2010-10-22 10:21:49 -07:00
unusual_realtek.h usb-storage: fix up the unusual_realtek device list 2011-05-17 11:56:28 -07:00
unusual_sddr09.h USB: storage: Use USB_ prefix instead of US_ prefix 2010-10-22 10:21:49 -07:00
unusual_sddr55.h USB: storage: Use USB_ prefix instead of US_ prefix 2010-10-22 10:21:49 -07:00
unusual_usbat.h USB: storage: Use USB_ prefix instead of US_ prefix 2010-10-22 10:21:49 -07:00
usb.c usb-storage: fix freezing of the scanning thread 2012-02-29 16:34:27 -08:00
usb.h usb-storage: fix freezing of the scanning thread 2012-02-29 16:34:27 -08:00
usual-tables.c Merge branch 'staging-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging-2.6 2011-03-16 15:19:35 -07:00