Revision bb94a406682770a35305daaa241ccdb7cab399de authored by Alan Stern on 21 February 2012, 18:16:32 UTC, committed by Greg Kroah-Hartman on 22 February 2012, 00:29:15 UTC
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>
CC: stable <stable@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 9a9a71b
History
File Mode Size
basic
coccinelle
dtc
genksyms
kconfig
ksymoops
mod
package
rt-tester
selinux
tracing
.gitignore -rw-r--r-- 96 bytes
Kbuild.include -rw-r--r-- 10.1 KB
Lindent -rwxr-xr-x 460 bytes
Makefile -rw-r--r-- 1.2 KB
Makefile.asm-generic -rw-r--r-- 681 bytes
Makefile.build -rw-r--r-- 14.5 KB
Makefile.clean -rw-r--r-- 3.2 KB
Makefile.fwinst -rw-r--r-- 2.0 KB
Makefile.headersinst -rw-r--r-- 4.0 KB
Makefile.help -rw-r--r-- 68 bytes
Makefile.host -rw-r--r-- 6.5 KB
Makefile.lib -rw-r--r-- 12.1 KB
Makefile.modbuiltin -rw-r--r-- 1.8 KB
Makefile.modinst -rw-r--r-- 1.0 KB
Makefile.modpost -rw-r--r-- 5.1 KB
bin2c.c -rw-r--r-- 702 bytes
bloat-o-meter -rwxr-xr-x 1.8 KB
bootgraph.pl -rw-r--r-- 5.6 KB
checkincludes.pl -rwxr-xr-x 1.8 KB
checkkconfigsymbols.sh -rwxr-xr-x 1.8 KB
checkpatch.pl -rwxr-xr-x 91.0 KB
checkstack.pl -rwxr-xr-x 5.2 KB
checksyscalls.sh -rwxr-xr-x 5.5 KB
checkversion.pl -rwxr-xr-x 1.9 KB
cleanfile -rwxr-xr-x 3.4 KB
cleanpatch -rwxr-xr-x 5.0 KB
coccicheck -rwxr-xr-x 3.2 KB
config -rwxr-xr-x 2.8 KB
conmakehash.c -rw-r--r-- 6.0 KB
decodecode -rwxr-xr-x 1.9 KB
depmod.sh -rwxr-xr-x 1.3 KB
diffconfig -rwxr-xr-x 3.6 KB
docproc.c -rw-r--r-- 14.1 KB
export_report.pl -rw-r--r-- 4.5 KB
extract-ikconfig -rwxr-xr-x 1.6 KB
extract-vmlinux -rwxr-xr-x 1.6 KB
gcc-goto.sh -rw-r--r-- 224 bytes
gcc-version.sh -rw-r--r-- 819 bytes
gcc-x86_32-has-stack-protector.sh -rw-r--r-- 183 bytes
gcc-x86_64-has-stack-protector.sh -rw-r--r-- 199 bytes
gen_initramfs_list.sh -rw-r--r-- 7.4 KB
get_maintainer.pl -rwxr-xr-x 53.8 KB
gfp-translate -rw-r--r-- 1.7 KB
headerdep.pl -rwxr-xr-x 3.5 KB
headers.sh -rwxr-xr-x 530 bytes
headers_check.pl -rw-r--r-- 2.7 KB
headers_install.pl -rw-r--r-- 1.8 KB
kallsyms.c -rw-r--r-- 15.2 KB
kernel-doc -rwxr-xr-x 62.4 KB
makelst -rwxr-xr-x 773 bytes
markup_oops.pl -rw-r--r-- 8.1 KB
mkcompile_h -rwxr-xr-x 2.5 KB
mkmakefile -rw-r--r-- 1.2 KB
mksysmap -rw-r--r-- 1.3 KB
mkuboot.sh -rwxr-xr-x 379 bytes
mkversion -rw-r--r-- 74 bytes
module-common.lds -rw-r--r-- 737 bytes
namespace.pl -rwxr-xr-x 13.0 KB
patch-kernel -rwxr-xr-x 9.8 KB
pnmtologo.c -rw-r--r-- 11.7 KB
profile2linkerlist.pl -rw-r--r-- 375 bytes
recordmcount.c -rw-r--r-- 11.9 KB
recordmcount.h -rw-r--r-- 16.3 KB
recordmcount.pl -rwxr-xr-x 17.5 KB
setlocalversion -rwxr-xr-x 3.9 KB
show_delta -rwxr-xr-x 3.0 KB
tags.sh -rwxr-xr-x 7.4 KB
unifdef.c -rw-r--r-- 34.8 KB
ver_linux -rwxr-xr-x 3.1 KB
xz_wrap.sh -rw-r--r-- 559 bytes

back to top