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