Hello all,

trying to find out why my microtek scanner would not work with
2.2.x-kernels (it worked with 2.0.38) I found the following kernel
problems.

1. Scsi commands returning BUSY are *not* automatically retried by the
AHA1542 as the manual tries to tell us. (Did I misunderstand anything?)
Instead, scsi_decide_disposition considers retrying the command; default
is NO RETRIES, therefore the command fails.

2. In consequence, the error handler is woken up which in turn calls
scsi_request_sense (which only makes sense after a CHECK_CONDITION
status!)

3. aha1542.c finds the REQUEST_SENSE command and, knowing about auto
sense, returns SCpnt->result = 0, marking the previous (!) command as
successfully finished.

In practise, this means:
sane issues TEST_UNIT_READY
scanner returns GOOD although it is not willing to accept a START_SCAN
sane issues START_SCAN
scanner reports BUSY
scsi_decide_disposition decides against retry, returning FAILED
scsi.c wants REQUEST_SENSE
aha1542 returns NO SENSE and marks the previous command (START_SCAN)
GOOD
sane issues GET_SCAN_STATUS
This is acceptable only in scanning mode, therefore it fails.

I fixed the problem by having scsi_decide_disposition *always* return
NEEDS_RETRY when it finds BUSY (which might lead to an endless loop if
an attached device goes bananas).
In any case, IMHO it is erroneous
1. to issue a REQUEST_SENSE command unless the target returned
CHECK_CONDITION
2. to mark a command as finished successfully because REQUEST_SENSE
succeeded.
I'm afraid I have too little background knowledge to suggest a clean
general solution without your comments.

Regards,

Klaus Syttkus.

BTW, the wd7000 driver does not seem to work as a kernel module
(Oops...). Any comments on this problem?
-
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to [EMAIL PROTECTED]

Reply via email to