linux/drivers/usb/storage
Bjørn Mork ab4b71644a USB: storage: fix Huawei mode switching regression
This reverts commit 200e0d99 ("USB: storage: optimize to match the
Huawei USB storage devices and support new switch command" and the
followup bugfix commit cd060956 ("USB: storage: properly handle
the endian issues of idProduct").

The commit effectively added a large number of Huawei devices to
the deprecated usb-storage mode switching logic.  Many of these
devices have been in use and supported by the userspace
usb_modeswitch utility for years.  Forcing the switching inside
the kernel causes a number of regressions as a result of ignoring
existing onfigurations, and also completely takes away the ability
to configure mode switching per device/system/user.

Known regressions caused by this:
 - Some of the devices support multiple modes, using different
  switching commands.  There are existing configurations taking
  advantage of this.

 - There is a real use case for disabling mode switching and
  instead mounting the exposed storage device. This becomes
  impossible with switching logic inside the usb-storage driver.

 - At least on device fail as a result of the usb-storage switching
  command, becoming completely unswitchable. This is possibly a
  firmware bug, but still a regression because the device work as
  expected using usb_modeswitch defaults.

In-kernel mode switching was deprecated years ago with the
development of the more user friendly userspace alternatives. The
existing list of devices in usb-storage was only kept to prevent
breaking already working systems.  The long term plan is to remove
the list, not to add to it. Ref:
http://permalink.gmane.org/gmane.linux.usb.general/28543

Cc: <fangxiaozhi@huawei.com>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Bjørn Mork <bjorn@mork.no>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-03-07 12:23:17 +08:00
..
alauda.c usb: remove libusual 2012-09-05 17:21:36 -07:00
cypress_atacb.c usb: remove libusual 2012-09-05 17:21:36 -07:00
datafab.c usb: remove libusual 2012-09-05 17:21:36 -07:00
debug.c
debug.h
ene_ub6250.c usb: remove libusual 2012-09-05 17:21:36 -07:00
freecom.c usb: remove libusual 2012-09-05 17:21:36 -07:00
initializers.c USB: storage: fix Huawei mode switching regression 2013-03-07 12:23:17 +08:00
initializers.h USB: storage: fix Huawei mode switching regression 2013-03-07 12:23:17 +08:00
isd200.c usb: remove libusual 2012-09-05 17:21:36 -07:00
jumpshot.c usb: remove libusual 2012-09-05 17:21:36 -07:00
karma.c usb: remove libusual 2012-09-05 17:21:36 -07:00
Kconfig USB: mark uas driver as BROKEN 2012-11-28 13:28:54 -08:00
Makefile usb: remove libusual 2012-09-05 17:21:36 -07:00
onetouch.c usb: remove libusual 2012-09-05 17:21:36 -07:00
option_ms.c
option_ms.h
protocol.c
protocol.h
realtek_cr.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2012-12-13 12:00:02 -08:00
scsiglue.c [SCSI] sd: Implement support for WRITE SAME 2012-11-13 22:45:42 -08:00
scsiglue.h
sddr09.c usb: remove libusual 2012-09-05 17:21:36 -07:00
sddr55.c usb: remove libusual 2012-09-05 17:21:36 -07:00
shuttle_usbat.c usb: remove libusual 2012-09-05 17:21:36 -07:00
sierra_ms.c USB: sierra_ms: don't keep unused variable 2012-09-21 09:50:02 -07:00
sierra_ms.h
transport.c
transport.h
uas.c usb-uas: set max_lun and max_channel 2013-01-25 09:56:54 -08:00
unusual_alauda.h
unusual_cypress.h USB: usb-storage: unusual_devs update for Super TOP SATA bridge 2013-02-14 09:22:02 -08:00
unusual_datafab.h
unusual_devs.h USB: storage: fix Huawei mode switching regression 2013-03-07 12:23:17 +08:00
unusual_ene_ub6250.h
unusual_freecom.h
unusual_isd200.h
unusual_jumpshot.h
unusual_karma.h
unusual_onetouch.h
unusual_realtek.h
unusual_sddr09.h
unusual_sddr55.h
unusual_usbat.h
usb.c Merge usb-linus branch into usb-next 2013-02-08 12:03:11 -08:00
usb.h
usual-tables.c USB: storage: Define a new macro for USB storage match rules 2013-02-04 10:40:16 -08:00