SCSI's error handling hooks are called inside spin_lock_irqsave(host_lock, flags) ... spin_unlock_irqrestore(host_lock, flags) ide-scsi's SCSI EH functions, which operate inside the above lock, wrap several operations inside spin_lock_irq(ide_lock) ... spin_unlock_irq(ide_lock) Use of the unconditional spin_lock_irq(), as opposed to spin_lock_irqsave(), corrupts the irq context. Attached patch (against latest git) updates ide-scsi to simply use the spin_lock() variant, since we know we are already inside of spin_lock_irqsave(). Patch untested, but at least the code isn't obviously wrong now...