Subject: Re: WD7000
To: None <J.C.Highfield@lut.ac.uk>
From: Charles Hannum <Charles-Hannum@deshaw.com>
Date: 01/04/1996 20:16:07
[Forwarding this to tech-kern, as other people may want to comment.]
I have a
question about the scsi system in general: Do SCSI requests due to file
system activity always have SCSI_NOSLEEP set?
Any activity with an associated buffer will have SCSI_NOSLEEP set.
This is because after the strategy routine queues a transfer, the
low-level driver may (and frequently will) be called from a context
where it is inappropriate to sleep. If the low-level driver detects
that it is out of resources and returns TRY_AGAIN_LATER, the mid-level
code will retry a second later. If there is enough contention, it
will time out.
There's probably a better way to handle this, but I haven't thought
about it much. Perhaps a call down from the strategy routine to
allocate the resources that the low-level driver will need; that way
we can sleep inside the strategy routine, which is safe. It looks
like we could toast SCSI_NOSLEEP completely.
If you have any suggestions, feel free to send them.