Date: Mon, 11 Nov 1996 20:26:12 -0800 From: "Justin T. Gibbs" <gibbs@freefall.freebsd.org> To: Andreas Klemm <andreas@klemm.gtn.com> Cc: "Alexsandro D. F. Correia" <acorreia@marlin.com.br>, hackers@FreeBSD.org Subject: Re: Problems restoring Backups !!! Message-ID: <199611120426.UAA13829@freefall.freebsd.org> In-Reply-To: Your message of "Mon, 11 Nov 1996 22:16:10 %2B0100." <Pine.BSF.3.95.961111221306.227A-100000@klemm.gtn.com>
next in thread | previous in thread | raw e-mail | index | archive | help
>I get now thousands of (looping) Queue Full lines, when trying to make >a backup using dump(8). Well, I can't fix it completely unless I change some unsigned variables to signed in the scsi code, but I don't want to do that unless its absolutely necessary as it may break more code then it fixes. This should drop you down to at most 1 more tag than your drive can handle, which should make the problem less of a problem. It also won't fill your log file up. Let me know how this works out for you... >-- >andreas@klemm.gtn.com /\/\___ Wiechers & Partner Datentechnik Gmb >H > Andreas Klemm ___/\/\/ Support Unix -- andreas.klemm@wup.d >e >pgp p-key http://www-swiss.ai.mit.edu/~bal/pks-toplev.html >>> powered by << >< >ftp://sunsite.unc.edu/pub/Linux/system/Printing/aps-491.tgz >>> FreeBSD << >< > -- Justin T. Gibbs =========================================== FreeBSD: Turning PCs into workstations =========================================== Index: i386/scsi/aic7xxx.c =================================================================== RCS file: /usr/cvs/src/sys/i386/scsi/aic7xxx.c,v retrieving revision 1.85 diff -c -r1.85 aic7xxx.c *** aic7xxx.c 1996/11/11 05:24:44 1.85 --- aic7xxx.c 1996/11/12 04:19:04 *************** *** 1206,1226 **** if (xs->error == XS_NOERROR) xs->error = XS_DRIVER_STUFFUP; break; case SCSI_BUSY: xs->error = XS_BUSY; sc_print_addr(xs->sc_link); printf("Target Busy\n"); - break; - case SCSI_QUEUE_FULL: - /* - * The upper level SCSI code will someday - * handle this properly. - */ - printf("Queue Full\n"); - /* - * XXX requeue this unconditionally. - */ - STAILQ_INSERT_HEAD(&ahc->waiting_scbs, scb, links); break; default: sc_print_addr(xs->sc_link); --- 1206,1242 ---- if (xs->error == XS_NOERROR) xs->error = XS_DRIVER_STUFFUP; break; + case SCSI_QUEUE_FULL: + if (scb->hscb->control & TAG_ENB) { + /* + * The upper level SCSI code in 3.0 + * handles this properly... + */ + struct scsi_link *sc_link; + + sc_link = xs->sc_link; + if (sc_link->active > 2 + && sc_link->opennings != 0) { + /* truncate the opennings */ + sc_link->opennings = 0; + sc_print_addr(sc_link); + printf("Tagged openings reduced to " + "%d\n", sc_link->active); + } + /* + * XXX requeue this unconditionally. + */ + STAILQ_INSERT_TAIL(&ahc->waiting_scbs, scb, + links); + break; + } + /* Else treat as if it is a BUSY condition */ + scb->hscb->status = SCSI_BUSY; + /* Fall Through... */ case SCSI_BUSY: xs->error = XS_BUSY; sc_print_addr(xs->sc_link); printf("Target Busy\n"); break; default: sc_print_addr(xs->sc_link);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199611120426.UAA13829>