[sane-devel] Problem with empty sense buffer in sanei_scsi (linux+hpusbscsi+vuescan)?

Jose Paulo Moitinho de Almeida moitinho@civil.ist.utl.pt
Mon, 15 Oct 2001 09:57:01 +0100


On Monday 15 October 2001 02:37, Douglas Gilbert wrote:
> Jose Paulo Moitinho de Almeida wrote:
> > On Thursday 04 October 2001 21:01, abel deuring wrote:
>......
> >
> > masked_status 8 driver_status 0
>
> Paulo,
> The problem starts here, a masked_status of 8 corresponds
> to a SCSI status of INTERMEDIATE. This implies the command
> sent to the scanner had the link bit set in the control
> field which is the last byte in every command descriptor
> block. Perhaps the SANE backend driver wanted to invoke
> linked commands, more likely, it is a mistake by the
> backend driver. 

I think that Ed Hamrick is the right person top clarify this. 

> .....
>
> Perhaps you could look upstream and see if that link
> bit on the SCSI command is being set for a good reason.
>

I can tell that it is a film scanner and it was positioning the head...

> > Should sg.c be modified, so that when SG_INFO_CHECK is set, the
> > initialisation of the sense_buffer is done?
>
> I have just put some more words in the sg documentation
> (soon to be at: http://www.torque.net/sg/p/sg_v3_ho.html )
> to emphasize that SG_INFO_CHECK does not always imply that
> there will be a sense buffer.


> > The possibility that there may be a problem somewhere else should not be
> > excluded either. I am using a driver which is "fresh from the oven".
>

I can add that I had exactly the same result using the now "officially 
experimental" version of hpusbscsi that is in 2.4.12. Just adding the 
following patch to drivers/scsi/sg.c vuescan works fine. I know that I am not 
correcting the true source of the error!

----------------------------------------------
>*** sg.c.orig	Sun Oct 14 18:38:05 2001
--- sg.c	Sun Oct 14 18:37:19 2001
***************
*** 477,482 ****
--- 477,485 ----
      	goto err_out;
      }
      hp->sb_len_wr = 0;
+ #if 1
+     memset(hp->sbp, 0, 8);
+ #endif
      if ((hp->mx_sb_len > 0) && hp->sbp) {
  	if ((CHECK_CONDITION & hp->masked_status) ||
  	    (DRIVER_SENSE & hp->driver_status)) {
----------------------------------------------

> abel deuring <adeuring@gmx.net> wrote:
> > Maybe, but I think that older versions of the SG driver
> > do not return the length of sense data read from a device.
> > (Douglas, can you confirm this?)
>
> Abel,
> Yes, that is correct. To get around this, apps like cdrecord
> and paranoia would pre-fill the sense buffer with zeroes and
> then look for a change when the command completed.
>

Would that be an alternative, or is it better to try Abel's patch?


Regards

Ze Paulo