Re: [RFC PATCH] blk-mq: Fix lost request during timeout

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, 2017-09-18 at 21:55 -0400, Keith Busch wrote:
> The only way to complete that request now is if the timeout
> handler returns BLK_EH_HANDLED, but the scsi-mq abort path returns
> BLK_EH_NOT_HANDLED on success (very few drivers actually return
> BLK_EH_HANDLED).
> 
> After the timeout handler runs, it's once again possible for the driver to
> complete the request if it returned BLK_EH_RESET_TIMER, but if the driver
> already completed the command during the timeout handler, how is the
> driver supposed to know it needs to complete the request a second time?

Hello Keith,

If you have a look at scmd_eh_abort_handler() then you will see that it either
calls scsi_queue_insert(), scsi_finish_command() or scsi_eh_scmd_add().
scsi_queue_insert() reinserts the request. scsi_eh_scmd_add() wakes up the
error handler thread to perform further error handling escalation.
scsi_finish_command() calls scsi_end_request(). That last function in turn
calls __blk_mq_end_request(). __blk_mq_end_request() does not check
REQ_ATOM_COMPLETE. Sorry but the summary is that I do not agree with you
that the SCSI core can lose requests.

Bart.




[Index of Archives]     [Linux RAID]     [Linux SCSI]     [Linux ATA RAID]     [IDE]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Device Mapper]

  Powered by Linux