Revision fea6d607e154cf96ab22254ccb48addfd43d4cb5 authored by Alan Stern on 17 February 2012, 21:25:08 UTC, committed by James Bottomley on 18 February 2012, 14:54:19 UTC
This patch (as1520) fixes a bug in the SCSI layer's power management implementation. LUN scanning can be carried out asynchronously in do_scan_async(), and sd uses an asynchronous thread for the time-consuming parts of disk probing in sd_probe_async(). Currently nothing coordinates these async threads with system sleep transitions; they can and do attempt to continue scanning/probing SCSI devices even after the host adapter has been suspended. As one might expect, the outcome is not ideal. This is what the "prepare" stage of system suspend was created for. After the prepare callback has been called for a host, target, or device, drivers are not allowed to register any children underneath them. Currently the SCSI prepare callback is not implemented; this patch rectifies that omission. For SCSI hosts, the prepare routine calls scsi_complete_async_scans() to wait until async scanning is finished. It might be slightly more efficient to wait only until the host in question has been scanned, but there's currently no way to do that. Besides, during a sleep transition we will ultimately have to wait until all the host scanning has finished anyway. For SCSI devices, the prepare routine calls async_synchronize_full() to wait until sd probing is finished. The routine does nothing for SCSI targets, because asynchronous target scanning is done only as part of host scanning. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> CC: <stable@kernel.org> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
1 parent 267a6ad
File | Mode | Size |
---|---|---|
lzo | ||
mpi | ||
raid6 | ||
reed_solomon | ||
xz | ||
zlib_deflate | ||
zlib_inflate | ||
.gitignore | -rw-r--r-- | 51 bytes |
Kconfig | -rw-r--r-- | 6.8 KB |
Kconfig.debug | -rw-r--r-- | 43.6 KB |
Kconfig.kgdb | -rw-r--r-- | 2.3 KB |
Kconfig.kmemcheck | -rw-r--r-- | 2.9 KB |
Makefile | -rw-r--r-- | 3.9 KB |
argv_split.c | -rw-r--r-- | 1.8 KB |
atomic64.c | -rw-r--r-- | 4.2 KB |
atomic64_test.c | -rw-r--r-- | 3.5 KB |
audit.c | -rw-r--r-- | 1.2 KB |
average.c | -rw-r--r-- | 1.9 KB |
bcd.c | -rw-r--r-- | 257 bytes |
bch.c | -rw-r--r-- | 35.6 KB |
bitmap.c | -rw-r--r-- | 34.5 KB |
bitrev.c | -rw-r--r-- | 2.1 KB |
bsearch.c | -rw-r--r-- | 1.6 KB |
btree.c | -rw-r--r-- | 19.2 KB |
bug.c | -rw-r--r-- | 4.7 KB |
bust_spinlocks.c | -rw-r--r-- | 636 bytes |
check_signature.c | -rw-r--r-- | 599 bytes |
checksum.c | -rw-r--r-- | 4.8 KB |
clz_tab.c | -rw-r--r-- | 855 bytes |
cmdline.c | -rw-r--r-- | 3.6 KB |
cordic.c | -rw-r--r-- | 2.5 KB |
cpu-notifier-error-inject.c | -rw-r--r-- | 1.5 KB |
cpu_rmap.c | -rw-r--r-- | 6.8 KB |
cpumask.c | -rw-r--r-- | 4.5 KB |
crc-ccitt.c | -rw-r--r-- | 3.0 KB |
crc-itu-t.c | -rw-r--r-- | 2.8 KB |
crc-t10dif.c | -rw-r--r-- | 2.9 KB |
crc16.c | -rw-r--r-- | 2.8 KB |
crc32.c | -rw-r--r-- | 14.5 KB |
crc32defs.h | -rw-r--r-- | 1.0 KB |
crc7.c | -rw-r--r-- | 2.3 KB |
crc8.c | -rw-r--r-- | 2.4 KB |
ctype.c | -rw-r--r-- | 1.3 KB |
debug_locks.c | -rw-r--r-- | 1.1 KB |
debugobjects.c | -rw-r--r-- | 26.5 KB |
dec_and_lock.c | -rw-r--r-- | 784 bytes |
decompress.c | -rw-r--r-- | 1.3 KB |
decompress_bunzip2.c | -rw-r--r-- | 23.4 KB |
decompress_inflate.c | -rw-r--r-- | 3.7 KB |
decompress_unlzma.c | -rw-r--r-- | 15.8 KB |
decompress_unlzo.c | -rw-r--r-- | 6.8 KB |
decompress_unxz.c | -rw-r--r-- | 10.6 KB |
devres.c | -rw-r--r-- | 9.2 KB |
digsig.c | -rw-r--r-- | 5.7 KB |
div64.c | -rw-r--r-- | 3.1 KB |
dma-debug.c | -rw-r--r-- | 33.2 KB |
dump_stack.c | -rw-r--r-- | 290 bytes |
dynamic_debug.c | -rw-r--r-- | 20.3 KB |
dynamic_queue_limits.c | -rw-r--r-- | 4.2 KB |
extable.c | -rw-r--r-- | 2.4 KB |
fault-inject.c | -rw-r--r-- | 5.9 KB |
find_last_bit.c | -rw-r--r-- | 1.1 KB |
find_next_bit.c | -rw-r--r-- | 6.4 KB |
flex_array.c | -rw-r--r-- | 10.9 KB |
gcd.c | -rw-r--r-- | 291 bytes |
gen_crc32table.c | -rw-r--r-- | 2.2 KB |
genalloc.c | -rw-r--r-- | 11.1 KB |
halfmd4.c | -rw-r--r-- | 2.0 KB |
hexdump.c | -rw-r--r-- | 7.0 KB |
hweight.c | -rw-r--r-- | 1.9 KB |
idr.c | -rw-r--r-- | 23.4 KB |
inflate.c | -rw-r--r-- | 38.6 KB |
int_sqrt.c | -rw-r--r-- | 533 bytes |
iomap.c | -rw-r--r-- | 6.5 KB |
iomap_copy.c | -rw-r--r-- | 2.1 KB |
iommu-helper.c | -rw-r--r-- | 1006 bytes |
ioremap.c | -rw-r--r-- | 2.1 KB |
irq_regs.c | -rw-r--r-- | 578 bytes |
is_single_threaded.c | -rw-r--r-- | 1.3 KB |
kasprintf.c | -rw-r--r-- | 704 bytes |
klist.c | -rw-r--r-- | 9.3 KB |
kobject.c | -rw-r--r-- | 23.2 KB |
kobject_uevent.c | -rw-r--r-- | 10.4 KB |
kstrtox.c | -rw-r--r-- | 6.0 KB |
kstrtox.h | -rw-r--r-- | 254 bytes |
lcm.c | -rw-r--r-- | 288 bytes |
libcrc32c.c | -rw-r--r-- | 2.1 KB |
list_debug.c | -rw-r--r-- | 1.9 KB |
list_sort.c | -rw-r--r-- | 7.0 KB |
llist.c | -rw-r--r-- | 2.8 KB |
locking-selftest-hardirq.h | -rw-r--r-- | 207 bytes |
locking-selftest-mutex.h | -rw-r--r-- | 120 bytes |
locking-selftest-rlock-hardirq.h | -rw-r--r-- | 74 bytes |
locking-selftest-rlock-softirq.h | -rw-r--r-- | 74 bytes |
locking-selftest-rlock.h | -rw-r--r-- | 158 bytes |
locking-selftest-rsem.h | -rw-r--r-- | 163 bytes |
locking-selftest-softirq.h | -rw-r--r-- | 207 bytes |
locking-selftest-spin-hardirq.h | -rw-r--r-- | 73 bytes |
locking-selftest-spin-softirq.h | -rw-r--r-- | 73 bytes |
locking-selftest-spin.h | -rw-r--r-- | 118 bytes |
locking-selftest-wlock-hardirq.h | -rw-r--r-- | 74 bytes |
locking-selftest-wlock-softirq.h | -rw-r--r-- | 74 bytes |
locking-selftest-wlock.h | -rw-r--r-- | 158 bytes |
locking-selftest-wsem.h | -rw-r--r-- | 163 bytes |
locking-selftest.c | -rw-r--r-- | 28.6 KB |
lru_cache.c | -rw-r--r-- | 14.6 KB |
md5.c | -rw-r--r-- | 3.7 KB |
nlattr.c | -rw-r--r-- | 12.3 KB |
parser.c | -rw-r--r-- | 6.1 KB |
pci_iomap.c | -rw-r--r-- | 1.4 KB |
percpu_counter.c | -rw-r--r-- | 5.1 KB |
plist.c | -rw-r--r-- | 4.7 KB |
prio_heap.c | -rw-r--r-- | 1.4 KB |
prio_tree.c | -rw-r--r-- | 12.2 KB |
proportions.c | -rw-r--r-- | 9.3 KB |
radix-tree.c | -rw-r--r-- | 39.3 KB |
random32.c | -rw-r--r-- | 3.9 KB |
ratelimit.c | -rw-r--r-- | 1.5 KB |
rational.c | -rw-r--r-- | 1.5 KB |
rbtree.c | -rw-r--r-- | 10.1 KB |
reciprocal_div.c | -rw-r--r-- | 218 bytes |
rwsem-spinlock.c | -rw-r--r-- | 7.0 KB |
rwsem.c | -rw-r--r-- | 8.1 KB |
scatterlist.c | -rw-r--r-- | 12.8 KB |
sha1.c | -rw-r--r-- | 6.1 KB |
show_mem.c | -rw-r--r-- | 1.3 KB |
smp_processor_id.c | -rw-r--r-- | 1.1 KB |
sort.c | -rw-r--r-- | 2.5 KB |
spinlock_debug.c | -rw-r--r-- | 6.8 KB |
string.c | -rw-r--r-- | 16.0 KB |
string_helpers.c | -rw-r--r-- | 1.7 KB |
swiotlb.c | -rw-r--r-- | 25.7 KB |
syscall.c | -rw-r--r-- | 2.4 KB |
test-kstrtox.c | -rw-r--r-- | 17.4 KB |
textsearch.c | -rw-r--r-- | 9.6 KB |
timerqueue.c | -rw-r--r-- | 3.1 KB |
ts_bm.c | -rw-r--r-- | 5.3 KB |
ts_fsm.c | -rw-r--r-- | 10.6 KB |
ts_kmp.c | -rw-r--r-- | 4.3 KB |
uuid.c | -rw-r--r-- | 1.4 KB |
vsprintf.c | -rw-r--r-- | 47.2 KB |
![swh spinner](/static/img/swh-spinner.gif)
Computing file changes ...