linux/drivers/block
Pete Zaitcev d73b7aff28 ub: stub pre_reset and post_reset to fix oops
Due to recent changes to usb_reset_device, the following hang occurs:

events/0      D 0000000000000000     0     6      2
 ffff880037477cc0 0000000000000046 ffff880037477c50 ffffffff80237434
 ffffffff80574c80 00000001000a015c 0000000000000286 ffff8800374757d0
 ffff88002a31c860 ffff880037475a00 0000000036779140 ffff880037475a00
Call Trace:
 [<ffffffff80237434>] try_to_del_timer_sync+0x52/0x5b
 [<ffffffff8026f86c>] dma_pool_free+0x1a7/0x1ec
 [<ffffffffa02a928a>] ub_disconnect+0x8e/0x1ad [ub]
 [<ffffffff802407c9>] autoremove_wake_function+0x0/0x2e
 [<ffffffff80378959>] usb_unbind_interface+0x5c/0xb7
 [<ffffffff8036ab70>] __device_release_driver+0x95/0xbd
 [<ffffffff8036ac70>] device_release_driver+0x21/0x2d
 [<ffffffff803789f8>] usb_driver_release_interface+0x44/0x83
 [<ffffffff80378ab9>] usb_forced_unbind_intf+0x17/0x1d
 [<ffffffff80371ba4>] usb_reset_device+0x7d/0x114
 [<ffffffffa02aaffd>] ub_reset_task+0x0/0x293 [ub]
 [<ffffffffa02ab1c1>] ub_reset_task+0x1c4/0x293 [ub]
 [<ffffffff8033dd1e>] flush_to_ldisc+0x0/0x1cd
 [<ffffffffa02aaffd>] ub_reset_task+0x0/0x293 [ub]
 [<ffffffff8023d302>] run_workqueue+0x87/0x114
 [<ffffffff8023d467>] worker_thread+0xd8/0xe7
 [<ffffffff802407c9>] autoremove_wake_function+0x0/0x2e
 [<ffffffff8023d38f>] worker_thread+0x0/0xe7
 [<ffffffff802404c1>] kthread+0x47/0x73
 [<ffffffff8022c8dd>] schedule_tail+0x27/0x60
 [<ffffffff8020c249>] child_rip+0xa/0x11
 [<ffffffff8024047a>] kthread+0x0/0x73
 [<ffffffff8020c23f>] child_rip+0x0/0x11

This is because usb_reset_device now unbinds, and that calls disconnect,
which in case of ub waits until the reset completes... which deadlocks.
Worse, this deadlocks keventd and this takes whole box down.

I'm going to fix this properly later, but let's unbreak the driver
quickly for non-composite devices at least.

Signed-off-by: Pete Zaitcev <zaitcev@redhat.com>
Cc: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2008-11-13 14:45:04 -08:00
..
aoe [PATCH] switch aoeblk 2008-10-21 07:47:40 -04:00
paride [PATCH] switch pf 2008-10-21 07:47:59 -04:00
amiflop.c [PATCH] switch amiflop 2008-10-21 07:47:38 -04:00
ataflop.c [PATCH] switch ataflop 2008-10-21 07:47:42 -04:00
brd.c [PATCH] switch brd 2008-10-21 07:47:44 -04:00
cciss_cmd.h
cciss_scsi.c cciss: Fix cciss SCSI rescan code to better notice device changes 2008-10-09 08:56:18 +02:00
cciss_scsi.h cciss: Fix cciss SCSI rescan code to better notice device changes 2008-10-09 08:56:18 +02:00
cciss.c cciss: fix regression firmware not displayed in procfs 2008-11-06 15:41:18 -08:00
cciss.h cciss: make rebuild_lun_table behave better 2008-08-06 12:30:03 +02:00
cpqarray.c cpqarry: fix return value of cpqarray_init() 2008-11-06 15:41:17 -08:00
cpqarray.h
cryptoloop.c
DAC960.c [PATCH] switch DAC960 2008-10-21 07:47:36 -04:00
DAC960.h
floppy.c [PATCH] switch floppy 2008-10-21 07:47:49 -04:00
hd.c hd: WIN_* -> ATA_CMD_* 2008-10-10 22:39:21 +02:00
ida_cmd.h
ida_ioctl.h
Kconfig update the BLK_DEV_HD help text 2008-07-16 20:33:47 +02:00
loop.c fs: remove prepare_write/commit_write 2008-10-30 11:38:45 -07:00
Makefile
nbd.c [PATCH] switch nbd 2008-10-21 07:47:53 -04:00
pktcdvd.c [PATCH] sanitize blkdev_get() and friends 2008-10-21 07:49:06 -04:00
ps3disk.c block: don't depend on consecutive minor space 2008-10-09 08:56:05 +02:00
smart1,2.h
sunvdc.c sparc64: Apply const or __initdata to vio_device_id[] 2008-09-01 01:48:52 -07:00
swim3.c [PATCH] switch swim3 2008-10-21 07:48:03 -04:00
sx8.c
ub.c ub: stub pre_reset and post_reset to fix oops 2008-11-13 14:45:04 -08:00
umem.c
umem.h
viodasd.c [PATCH] switch viodasd 2008-10-21 07:48:07 -04:00
virtio_blk.c [PATCH] switch virtio_blk 2008-10-21 07:48:09 -04:00
xd.c [PATCH] switch xd 2008-10-21 07:48:11 -04:00
xd.h [PATCH] switch xd 2008-10-21 07:48:11 -04:00
xen-blkfront.c [PATCH] switch xen 2008-10-21 07:48:13 -04:00
xsysace.c [PATCH] switch xyspace 2008-10-21 07:48:15 -04:00
z2ram.c [PATCH] switch z2ram 2008-10-21 07:48:17 -04:00