Changes to kern.geom.debugflags?
Chris Ross
cross+freebsd at distal.com
Sat Dec 29 20:21:21 UTC 2012
On Dec 29, 2012, at 3:01 PM, Chris Ross <cross+freebsd at distal.com> wrote:
> On Dec 27, 2012, at 1:15 PM, Chris Ross <cross+freebsd at distal.com> wrote:
>> So, I've started with the tiring process of "printf debugging". I have gotten out of
>> the loader code, and can show that it's inside of the call to the zfs devsw dv_init()
>> call where it's failing.
>
> Okay. Many many iterations, and I found out where it's crashing. In
> sys/boot/zfs/zfsimpl.c, in dnode_read(), the first line of the while loop
> is:
>
> uint64_t bn = offset / bsize;
>
> And, bsize is calculated from:
>
> int bsize = dnode->dn_datablkszsec << SPA_MINBLOCKSHIFT;
>
> When running the code, though, I can confirm that bsize is 0 before the divide
> is hit, thus causing the divide by zero trap.
>
> I'm going to guess this is a problem with dnode->dn_datablkszsec. Has anything
> changed recently in zfs_fmtdev, or more likely zfs_get_root() or objset_get_dnode(),
> which is the callchain right before dnode_read() ?
So, the dnode in question is the MOS os_meta_dnode, for the MOS that's in the
SPA for the root. (Mind you, the internals of ZFS are all a black box to me, so I don't
understand what I just said).
Anyone have any idea why the dn_datablkszsec would be unset or wrote for
said meta dnode? That seems to be the crux of the problem. Where does that
all get initialized?
- Chris
More information about the freebsd-sparc64
mailing list