* Bruce Evans <[EMAIL PROTECTED]> [020204 05:26] wrote:
> On Sun, 3 Feb 2002, John Polstra wrote:
>
> > The kernel from today's current (CVSupped 3 Feb 2002 around 17:40
> > PST) can't stay up for more than a few minutes without getting a
> > page-not-present panic at line 1815 of ufs/ffs/ffs_alloc.c revision
> > 1.86. It is in this code:
> >
> > /*
> > * Find the size of the cluster going backward.
> > */
> > start = blkno - 1;
> > end = start - fs->fs_contigsumsize;
> > if (end < 0)
> > end = -1;
> > mapp = &freemapp[start / NBBY];
> > map = *mapp--;
> > ^^^^^
> > BANG!
>
> This was broken by a recent change to the type of NBBY.
>
> `start' is apparently negative (it would be for blkno == 0). Small
> negative values of `start' used to give an index of 0 in freemapp (not
> even small negative, since integer division bogusly rounds negative
> values towards 0). They now give an index of about 0x1fffffff on
> 32-bit machines.
>
> I also got panics in vm. The vm code apparently trapped while trying
> to map the preposterous address generated by the above.
>
> This patch just backs out the change to NBBY.
Wouldn't this make more sense:
Index: ffs/ffs_alloc.c
===================================================================
RCS file: /home/ncvs/src/sys/ufs/ffs/ffs_alloc.c,v
retrieving revision 1.86
diff -u -r1.86 ffs_alloc.c
--- ffs/ffs_alloc.c 2 Feb 2002 01:42:44 -0000 1.86
+++ ffs/ffs_alloc.c 4 Feb 2002 16:08:34 -0000
@@ -1790,7 +1790,7 @@
end = start + fs->fs_contigsumsize;
if (end >= cgp->cg_nclusterblks)
end = cgp->cg_nclusterblks;
- mapp = &freemapp[start / NBBY];
+ mapp = &freemapp[start < 0 ? 0 : start / NBBY];
map = *mapp++;
bit = 1 << (start % NBBY);
for (i = start; i < end; i++) {
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message