Re: libata error handling
From: Luben Tuikov <hidden>
Date: 2005-08-19 20:03:33
Also in:
linux-scsi, lkml
On 08/19/05 15:38, Patrick Mansfield wrote:
On Fri, Aug 19, 2005 at 02:46:35PM -0400, Luben Tuikov wrote:quoted
Using the command time out hook and the strategy routine, gives _complete_ control over host recovery, and I really do mean _complete_.I assume you mean hostt->eh_timed_out.
Hi Patrick, how are you? Yes, this is what I meant, sorry for not being clear.
Is anyone implmenting (or has implemented) a ->eh_timed_out function? I see none in mainline kernel.
Yes, I have.
I was looking at using it in an LLDD, but hit two problems, and have started to work on an alternate approach of cancelling (aborting or wtf you want to call it) a list of commands in the eh thread.
The eh_timed_out + eh_strategy_handler is actually pretty perfect, and _complete_, for any application and purpose in recovering a LU/device/host (in that order ;-) ).
The two problems I see with the hook are: It calls the driver in interrupt context, so the called function can't sleep.
Consider this: When SCSI Core told you that the command timed out, A) it has already finished, B) it hasn't already finished. In case A, you can return EH_HANDLED. In case B, you return EH_NOT_HANDLED, and deal with it in the eh_strategy_handler. (Hint: you can still "finish" it from there.) EH_RESET_TIMER is not really needed provided that - your interface infrastructure is in place, - you set the timeout value properly in slave_configure.
There is no queueing or list mechanism, so LLDD's that can only cancel one command at a time will have problem.
See above. Luben