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

next in thread | previous in thread | raw e-mail | index | archive | help
* 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




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020204080336.A95852>