[sane-devel] FreeBSD and Microtek Scanmaker II

abel deuring a.deuring@satzbau-gmbh.de
Sat, 21 Jun 2003 16:31:27 +0200

Matto Marjanovic wrote:

> A-ha --- ok, the sense handler is not called, an error condition is returned,
>  and then - I imagine - the retry logic in the backend takes over.

Right, I think that's happening.

> With regards to the mystery status value:  in this situation under Linux
>  (i.e., the scanner is busy, won't accept next command), a REQUEST SENSE
>  *is* issued and the scanner *does* respond to it.  However, the returned
>  data does not conform to SCSI-2.  In particular, the bit defined by
>  Microtek to mean "this is valid sense data" is the bit which, in SCSI-2,
>  means "this is *not* valid sense data".
> Because of this, the mid-level Linux SCSI driver *zeros out* the sense data,
>  yet still indicates that REQUEST SENSE has been issued.  Thus the backend's
>  sense handler is called with absolutely nothing and decides "No error".
> I suspect a similar thing is happening in the FreeBSD CAM system --- some
>  midlevel driver is unnecessarily killing the sense data.  Your patch checks
>  to see if the system thought the sense data is/was valid, and since it was
>  declared invalid, issues a general error instead.


are you sure that the Linux SCSI system (or FreeBSD) tries to issue a
REQUEST SENSE, if it can't "connect" to device? (If I find enough time,
I'll try that at home today or tomorrow. Shouldn't be difficult to
provoke such a situation with my Sharp JX250. Removing the O_EXCL flag
on the open call for the device file, using huge data blocks for READ
commands and then attepting to access the scanner form a different
process are worth a try.) OK, a SCSI device should be able to respond to
a few basic commands like INQUIRY or REQUEST SENSE under more or less
any circumstances, but the main point of the error "can't issue a SCSI
command, because the device is busy" is to try it again later. I don't
see the point, which additional information a REQUEST SENSE would

It's another point, if a command has been accepted by the device. If
this command results in an error, a REQUEST SENSE if of course useful.