James Bottomley wrote:
On Tue, 2006-05-16 at 11:41 -0400, Jeff Garzik wrote:
I can't see a case _in libata operation_ where a set of circumstances
arises that causes missed wakeups, can you elaborate?
This is scsi_eh_wakeup():
void scsi_eh_wakeup(struct Scsi_Host *shost)
{
if (shost->host_busy == shost->host_failed) {
wake_up_process(shost->ehandler);
so if you try a wakeup with no failed commands and the host still busy,
nothing happens.
Clearly. And where in the code do you see that this condition will strike?
If we are talking about impossible runtime conditions, then the
objection is academic.
move the prototype out of scsi_priv.h ... it should only be used by
transport classes, anyway.
We're talking about all ->eh_strategy_handler() users, which is a valid
EH API for an LLDD to choose. Granted libata is really the only one
right now.
We're busy revoking the LLDD driver, so in future it will be transport
classes only.
Long term, ->eh_strategy_handler and transport classes are block layer
not SCSI level anyway, so scsi_priv.h is clearly inappropriate.
That can be sorted out if someone actually gets around to moving error
handling to the block level. In the meantime, it's SCSI that we're
discussing.
Its an API-which-only-libata-uses that we're discussing. And because
its moving to the block layer, its also a
temporary-API-which-only-libata-uses.
Jeff
-
: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html