Skip site navigation (1)Skip section navigation (2)
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>