Subject: Re: bufcache cancer in -current?
To: None <,>
From: Sean Doran <>
List: current-users
Date: 05/24/2000 20:15:27
FWIW, I still get the problem with the latest Atlas-III firmware from

I did a quick-and-dirty hack below just for fun, and see this:

sd1(ahc2:6:0): queue full
smd: sc_link->active = 4; setting sc_link->openings to that - 1
sd1(ahc2:6:0): queue full
smd: sc_link->active = 3; setting sc_link->openings to that - 1

So far I haven't gone below ...openings = 2.

Maybe it should work like TCP with a divide-by-two response to
a queue_full and a periodic increase-by-one when things are normal
when sc_link->active reaches sc_link->openings?

However, the queue is full, there is still the current problem that
there is a bad write to the affected disk; in this case the
first one happened during "make obj" and the second happened
during the creation of a normal file.  The system wasn't happy
at all about the bad directly; the bad file was merely corrupted.


RCS file: /cvsroot/syssrc/sys/dev/ic/aic7xxx.c,v
retrieving revision 1.50
diff -u -r1.50 aic7xxx.c
--- aic7xxx.c   2000/05/23 03:50:12     1.50
+++ aic7xxx.c   2000/05/24 18:08:07
@@ -1883,6 +1883,11 @@
                case SCSI_STATUS_QUEUE_FULL:
                        printf("queue full\n");
+                       printf("smd: sc_link->active = %d; setting sc_link->open
ings to that - 1\n",
+                               xs->sc_link->active);
+                       xs->sc_link->openings -= 1;
+                       if((int)xs->sc_link->openings < (int)0)
+                               panic("smd: sc_link->openings underflow");
                case SCSI_STATUS_BUSY:
                         * Requeue any transactions that haven't been