Thread (18 messages) 18 messages, 7 authors, 2003-03-14

Re: Problem with aacraid driver in 2.5.63-bk-latest

From: Douglas Gilbert <hidden>
Date: 2003-03-12 23:44:28
Also in: lkml

Alan Cox wrote:
On Wed, 2003-03-12 at 23:06, Mark Haverkamp wrote:
quoted
During probe, scsi_alloc_sdev is called.  It calls
scsi_adjust_queue_depth with the cmd_per_lun value. 
scsi_adjust_queue_depth returns without doing anything if the tags value
is greater than 256.  This leaves the Scsi_Device queue_depth at zero. 
Later when an I/O is queued, scsi_request_fn checks for device_busy >=
queue_depth.  If so, the function does a break and exits.  This is where
it hangs.

To get things to load I set cmd_per_lun to 256.  I don't know if the is
the correct way to deal with the problem.  Maybe someone else can say
something about that.

If the SCSI layer is trying to be clever by ignoring the requested 512
then thats the actual problem. 512 is the right value because its not
really a disk you are talking to on the main channel. So the scsi layer
ought to honour it.
Here is the relevant code snippet in scsi.c around line
930:


void scsi_adjust_queue_depth(Scsi_Device *SDpnt, int tagged, int tags)
{
         static spinlock_t device_request_lock = SPIN_LOCK_UNLOCKED;
         unsigned long flags;

         /*
          * refuse to set tagged depth to an unworkable size
          */
         if(tags <= 0)
                 return;
         /*
          * Limit max queue depth on a single lun to 256 for now.  Remember,
          * we allocate a struct scsi_command for each of these and keep it
          * around forever.  Too deep of a depth just wastes memory.
          */
         if(tags > 256)
                 return;
....

[pardon the wrap]
Now scsi_device::queue_depth is an unsigned short so that
is not a problem. Also the comment prior to the
"if (tags > 256)" is no longer correct (I think). So
perhaps it can be changed to "if (tags > 65535) ..."

Doug Gilbert
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help