Return to BSD News archive
Newsgroups: comp.unix.bsd
Path: sserve!manuel!munnari.oz.au!network.ucsd.edu!sdd.hp.com!elroy.jpl.nasa.gov!ucla-cs!ucla-mic!scott
From: scott@pita.cns.ucla.edu (Scott Burris)
Subject: 386BSD 0.1: kmem_map too small panic fix
Message-ID: <1992Jul27.131414.12063@mic.ucla.edu>
Nntp-Posting-Host: pita.cns.ucla.edu
Reply-To: scott@pita.cns.ucla.edu (Scott Burris)
Organization: UCLA Campus Network Services
Date: 27 Jul 92 13:14:14 PDT
Lines: 55
Problem:
Sometime the kernel crashes on bootup with a kmem_map too small panic.
Solution:
To my knowledge, this only happens with SCSI systems. In the SCSI driver,
the block size of the disk is obtained through a SCSI READ CAPACITY
command. Unfortunately, sometimes the returned block size is insane,
causing the kernel to go belly up.
* HACK ALERT * HACK ALERT * HACK ALERT * HACK ALERT * HACK ALERT *
Although the following change fixes the problem by looping until a reasonable
looking block size is returned (never more than 1 loop in my experience),
I don't understand why the bogus information is returned in the first
place. I consider this to be more of a hack than a fix, since the READ
CAPACITY code should work correctly the first time.
My advice is to not install this patch unless you are getting the
panic described above.
Patch follows:
*** as.c Sun Jul 19 08:15:02 1992
--- as.c.orig Sat Jul 18 20:10:32 1992
***************
*** 438,444 ****
goto done;
}
- bsagain:
as->scsi_cdb_len = 10;
bzero(cdb, 10);
cdb[0] = 0x25; /* SCSI_READCAPACITY */
--- 434,439 ----
***************
*** 450,460 ****
}
- if (as->disk && as->bs > 10000) {
- printf("weird bs %d\n", as->bs);
- goto bsagain;
- }
-
if(asverbose)
printf("block size %d disksize %d ", as->bs, disksize);
--- 445,450 ----
--
----------
Scott Burris
UCLA Campus Network Services
cnetslb@oac.ucla.edu (213) 206-4860 - OR - scott@pita.cns.ucla.edu