Re: SCSI EH wakeup deadlock from deferred_qc
Damien Le Moal <[email protected]> Thu, 9 Jul 2026 07:54:45 +0900
| Newsgroups | gmane.linux.ide |
|---|---|
| Organization | Western Digital Research |
| Message-ID | <[email protected]> |
On 7/9/26 04:36, Igor Pylypiv wrote: > Hi Damien, > > I've stumbled upon an issue where SCSI EH didn't run upon command timeout > but ran ~10 or so seconds later. It seems like a recent regression from > the introduction of deffered_qc. > > When an active command times out while a non-NCQ command is waiting in > deferred_qc, SCSI EH fails to wake up. Recovery stalls until the deferred > command's own timer expires. > > When an NCQ command times out, scsi_timeout() calls scsi_eh_scmd_add(), > incrementing shost->host_failed (1). However, when scsi_eh_wakeup() checks > whether to wake the EH thread, scsi_host_busy(shost) counts 2 active > commands (1 timed-out + 1 in deferred_qc). > > Because busy (2) != host_failed (1), scsi_eh_wakeup() refuses to wake > the EH thread, deadlocking error recovery until the deferred command > times out on its own. Igor, Thank you for reporting this. Let me have a look. -- Damien Le Moal Western Digital Research