Thread (22 messages) 22 messages, 7 authors, 2005-08-19

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help