Re: eh_abort_handler and calling scsi_done

Brian King
2009-03-25T13:52:52Z

Christof Schmitt wrote:
> On Tue, Mar 24, 2009 at 10:46:09AM -0700, Mike Anderson wrote:
>> Brian King <brking@linux.vnet.ibm.com> wrote:
>>> Your assessment sounds correct to me. The other caveat to note is that
>>> if for some reason in your eh_abort_handler you don't think the command
>>> is still outstanding, you should return SUCCESS for this as well.
>>>
>>> -Brian
>>>
>>> Christof Schmitt wrote:
>>>> I am investigating what is required from a LLD when SCSI commands time
>>>> out and the SCSI EH calls the eh_abort_handler. The documentation in
>>>> scsi_eh.txt states:
>>>>
>>>> <<scsi_eh_abort_cmds>>
>>>>
>>>> This action is taken for each timed out command.
>>>> hostt->eh_abort_handler() is invoked for each scmd. The
>>>> handler returns SUCCESS if it has succeeded to make LLDD and
>>>> all related hardware forget about the scmd.
>>>>
>>>> From this and from looking at the code, i would conclude:
>>>>
>>>> 1) If the LLD returns FAILED from the eh_abort_handler, then the
>>>> command is still allowed to be active in the LLD and the LLD can
>>>> call scsi_done any time later (probably latest when the
>>>> eh_host_reset_handler flushes everything that is still pending).
>>>>
>>>> 2) While the abort is pending, but before returning SUCCESS from
>>>> eh_abort_handler, the LLD can still call scsi_done for the SCSI
>>>> command to be aborted (the SCSI command might be returned with a
>>>> status "aborted" if the abort succeeds, or "good" if it was
>>>> completed just before the abort reached the storage system).
>>>>
>> In cases 1 and 2 above calling scsi_done can be done but will cause
>> the request to be stopped in blk_complete_request
>> (scsi_done->blk_complete_request) as the timed out handler has
>> already taken ownership of the command.
>
> I am not too familiar with the blk completion handling. Would calling
> scsi_done for the cases above cause any problems? If there are reasons
> not to call scsi_done here, then this could be mentioned in the scsi
> documentation file.

No. There is no requirement to call scsi_done for aborted commands,
but there is also no harm in doing so.

-Brian

--
Brian King
Linux on Power Virtualization
IBM Linux Technology Center