Date: Mon, 4 Feb 2002 08:03:36 -0800 From: Alfred Perlstein <bright@mu.org> To: Bruce Evans <bde@zeta.org.au> Cc: John Polstra <jdp@polstra.com>, current@FreeBSD.ORG, markm@FreeBSD.ORG Subject: Re: Panics in ffs_clusteracct with todays -current Message-ID: <20020204080336.A95852@elvis.mu.org> In-Reply-To: <20020205000829.A22758-100000@gamplex.bde.org>; from bde@zeta.org.au on Tue, Feb 05, 2002 at 12:28:43AM %2B1100 References: <XFMail.20020203205249.jdp@polstra.com> <20020205000829.A22758-100000@gamplex.bde.org>
index | next in thread | previous in thread | raw e-mail
* Bruce Evans <bde@zeta.org.au> [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 majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020204080336.A95852>
