linux/drivers
Alan Stern 25ff1c316f USB: storage: add last-sector hacks
This patch (as1189b) adds some hacks to usb-storage for dealing with
the growing problems involving bad capacity values and last-sector
accesses:

	A new flag, US_FL_CAPACITY_OK, is created to indicate that
	the device is known to report its capacity correctly.  An
	unusual_devs entry for Linux's own File-backed Storage Gadget
	is added with this flag set, since g_file_storage always
	reports the correct capacity and since the capacity need
	not be even (it is determined by the size of the backing
	file).

	An entry in unusual_devs.h which has only the CAPACITY_OK
	flag set shouldn't prejudice libusual, since the device will
	work perfectly well with either usb-storage or ub.  So a
	new macro, COMPLIANT_DEV, is added to let libusual know
	about these entries.

	When a last-sector access succeeds and the total number of
	sectors is odd (the unexpected case, in which guessing that
	the number is even might cause trouble), a WARN is triggered.
	The kerneloops.org project will collect these warnings,
	allowing us to add CAPACITY_OK flags for the devices in
	question before implementing the default-to-even heuristic.
	If users want to prevent the stack dump produced by the WARN,
	they can disable the hack by adding an unusual_devs entry
	for their device with the CAPACITY_OK flag.

	When a last-sector access fails three times in a row and
	neither the FIX_CAPACITY nor the CAPACITY_OK flag is set,
	we assume the last-sector bug is present.  We replace the
	existing status and sense data with values that will cause
	the SCSI core to fail the access immediately rather than
	retry indefinitely.  This should fix the difficulties
	people have been having with Nokia phones.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Cc: stable <stable@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2009-01-07 10:00:11 -08:00
..
accessibility
acpi remove linux/hardirq.h from asm-generic/local.h 2009-01-06 15:59:13 -08:00
amba
ata libata: struct device - replace bus_id with dev_name(), dev_set_name() 2009-01-06 10:44:43 -08:00
atm
auxdisplay
base Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6 2009-01-06 17:02:07 -08:00
block USB: change interface to usb_lock_device_for_reset() 2009-01-07 09:59:52 -08:00
bluetooth
cdrom
char Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6 2009-01-06 17:02:07 -08:00
clocksource Merge branch 'cpus4096-for-linus-2' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2009-01-02 11:44:09 -08:00
connector
cpufreq
cpuidle
crypto
dca
dio
dma
edac edac: driver for i5400 MCH (update) 2009-01-06 15:59:30 -08:00
eisa
firewire
firmware Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6 2009-01-06 17:02:07 -08:00
gpio Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6 2009-01-06 17:02:07 -08:00
gpu drm: fix ordering of driver unload vs agp unload. 2009-01-07 11:54:57 +10:00
hid USB: change interface to usb_lock_device_for_reset() 2009-01-07 09:59:52 -08:00
hwmon Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6 2009-01-06 17:02:07 -08:00
i2c USB: move isp1301_omap to drivers/usb/otg 2009-01-07 10:00:02 -08:00
ide scc_pata: make use of scc_dma_sff_read_status() 2009-01-06 17:21:02 +01:00
idle i7300_idle: struct device - replace bus_id with dev_name(), dev_set_name() 2009-01-06 10:44:39 -08:00
ieee1394
infiniband infiniband: struct device - replace bus_id with dev_name(), dev_set_name() 2009-01-06 10:44:39 -08:00
input Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2009-01-06 17:14:01 -08:00
isdn ISDN: struct device - replace bus_id with dev_name(), dev_set_name() 2009-01-06 10:44:39 -08:00
leds
lguest lguest: do not statically allocate root device 2009-01-06 10:44:34 -08:00
macintosh Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6 2009-01-06 17:02:07 -08:00
mca
md dm snapshot: extend exception store functions 2009-01-06 03:05:19 +00:00
media USB: change interface to usb_lock_device_for_reset() 2009-01-07 09:59:52 -08:00
memstick memstick: struct device - replace bus_id with dev_name(), dev_set_name() 2009-01-06 10:44:38 -08:00
message Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6 2009-01-06 17:02:07 -08:00
mfd mfd: Fix section mismatch in da903x 2009-01-04 15:31:49 +01:00
misc Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6 2009-01-06 17:02:07 -08:00
mmc Merge branch 'master' of ../mmc 2008-12-31 19:56:05 +01:00
mtd mtd: struct device - replace bus_id with dev_name(), dev_set_name() 2009-01-06 10:44:38 -08:00
net USB: avoid needless address-taking of function parameters 2009-01-07 09:59:50 -08:00
nubus
of
oprofile zero i_uid/i_gid on inode allocation 2009-01-05 11:54:28 -05:00
parisc Merge branch 'cpus4096-for-linus-2' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2009-01-02 11:44:09 -08:00
parport parport: ieee1284: use del_timer_sync() in parport_wait_event() 2009-01-06 15:59:31 -08:00
pci PCI: Rework default handling of suspend and resume 2009-01-06 10:44:32 -08:00
pcmcia
pnp pnp: struct device - replace bus_id with dev_name(), dev_set_name() 2009-01-06 10:44:38 -08:00
power power-supply: struct device - replace bus_id with dev_name(), dev_set_name() 2009-01-06 10:44:38 -08:00
ps3
rapidio rapidio: remove excess kernel-doc notation 2009-01-06 15:59:28 -08:00
regulator mfd: Support configurable numbers of DCDCs and ISINKs on WM8350 2009-01-04 12:17:42 +01:00
rtc drivers/rtc: correct an error test 2009-01-06 15:59:25 -08:00
s390 s390: remove s390_root_dev_*() 2009-01-06 10:44:34 -08:00
sbus
scsi remove ide-scsi 2009-01-02 16:12:51 +01:00
serial serial: struct device - replace bus_id with dev_name(), dev_set_name() 2009-01-06 10:44:37 -08:00
sh
sn
spi Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6 2009-01-06 17:02:07 -08:00
ssb
staging Staging: android: binder: fix build errors 2009-01-06 13:52:46 -08:00
tc
telephony
thermal thermal: struct device - replace bus_id with dev_name(), dev_set_name() 2009-01-06 10:44:37 -08:00
uio UIO: Pass information about ioports to userspace (V2) 2009-01-06 10:44:44 -08:00
usb USB: storage: add last-sector hacks 2009-01-07 10:00:11 -08:00
uwb Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6 into for-upstream 2009-01-02 13:17:13 +00:00
video Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6 2009-01-06 17:02:07 -08:00
virtio virtio: do not statically allocate root device 2009-01-06 10:44:34 -08:00
w1 w1: struct device - replace bus_id with dev_name(), dev_set_name() 2009-01-06 10:44:34 -08:00
watchdog [WATCHDOG] Add support for the WM8350 watchdog 2008-12-31 16:12:54 +00:00
xen xen: struct device - replace bus_id with dev_name(), dev_set_name() 2009-01-06 10:44:34 -08:00
zorro
Kconfig
Makefile USB: move isp1301_omap to drivers/usb/otg 2009-01-07 10:00:02 -08:00