Re: ffs_clusteralloc: allocated out of group on 5TB fs (5.3-Stable)

From: Doug White <dwhite_at_gumbysoft.com>
Date: Mon, 6 Dec 2004 18:42:57 -0800 (PST)
On Mon, 6 Dec 2004, Erik Greenwald wrote:

> > 1545         if (dtog(fs, bno) != cg)
> > 1546                 panic("ffs_clusteralloc: allocated out of group");
>
> a couple weeks ago, when I found the issue, I tried dumping that line
> using a printf and got
>
> dtog(0xc4896800, -1894026712) != 25518
>
> (I think I used %x, %d, %d)

Unfortunately bno is a int64_t (via ufs2_daddr_t) so that value is
incorrect.

> I've no idea what those #'s mean, and couldn't find any documentation on
> 'dtog' (something to group?)

dtog translates a filesystem block to a cylinder group:

#define dtog(fs, d)     ((d) / (fs)->fs_fpg)

(fpg is frags per group)

bno comes from:

bno = cg * fs->fs_fpg + blkstofrags(fs, got - run + 1);

That seems more likely to overflow or be the victim of a bad cast since
everything on the rhs are ints.  blkstofrags is a bit-shift.

a 'bt full' would print all this, but if you have to instrument then this
should be a good start.

> I have a kernel with the DEBUG=-g option, (and config -g), can't get the
> dang thing to dump, though

It might help if you put the dump volume on something other than the
gigantic array, in case stuff is getting tied up there because of the ffs
problem.

-- 
Doug White                    |  FreeBSD: The Power to Serve
dwhite_at_gumbysoft.com          |  www.FreeBSD.org
Received on Tue Dec 07 2004 - 01:42:58 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:24 UTC