[sane-devel] SCSI problems with avision backend

Henning Meier-Geinitz henning@meier-geinitz.de
Fri, 12 Apr 2002 18:06:03 +0200


Hi,

On Thu, Apr 11, 2002 at 11:58:21PM -0400, Douglas Gilbert wrote:
> If you open an sg device with O_EXCL and it is already open
> then:
>   - if O_NONBLOCK is also set then the open() will fail
>     with EBUSY
>   - otherwise you will wait (interruptible) until the existing
>     open()s on that device are close()d.

Ok, that sounds reasonable. I was just a bit surprissed because I
thought we gor EBUSY until some time ago.

> All scsi bus scans done using sg should use O_NONBLOCK else
> they run the risk of hanging on somebody else's O_EXCL lock.

So we would change sanei_scsi.c line 1113

  fd = open (dev, O_RDWR | O_EXCL);
  
to

  fd = open (dev, O_RDWR | O_EXCL | O_NONBLOCK);

? 

Does this work with the other operating systems also. Or to be more
exact, O_NONBLOCK compiles everywhere? The man page suggests that it's
not Linux-specific.

Maybe we should also return SANE_STATUS_DEVICE_BUSY on EBUSY.

Bye,
  Henning