On Wed, Jul 12, 2017 at 12:10:02PM -0400, Alan Stern wrote: > This is pretty conclusive. The problem comes about because > usb_stor_control_thread() calls scsi_mq_done() while holding > shost->host_lock, and then scsi_eh_scmd_add() tries to acquire that > same lock. > > I don't know why this didn't show up in earlier kernels. I guess some > element of the call chain listed above must be new in 4.12. > > Christoph, what's the best way to fix this? Should usb-storage release > the host lock before issuing the ->scsi_done callback? If so, does > that change need to be applied to any kernels before 4.12? 4.12 switched to blk-mq by default, and while the old code used a softirq for completions, which is always a difference context the blk-mq code might execute in the same context it's called in. So yes, for that we'd need to drop host_lock. But I wonder how many more of these are lingering somewhere and if we can find another workaround. -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html