johansen wrote: > Hi Darren, > I took a look at your webrev and have a couple of questions: > > 1. When you built this source did you clobber all of the kernel portion and > rebuild?
I've done a full clobber build and it still happens. > I ask this because in your sdiff for uts/common/fs/zfs/sys/dnode.h you've > inserted the dnode structure member dn_crypt above dn_nlevels. If you have > code that is trying to manipulate dn_crypt but some old code still references > dn_nlevels at the offset of dn_crypt, you're going to run into very strange > problems. > > 2. If you've performed a clobber build, this could potentially indicate a > corrupted dnode_phys_t or corrupted objset_impl_t. The dnode gets dn_nlevels > set from dmu_objset_create_impl where it pulls the value our of the objset > os_meta_dnode. In dnode_create, it uses the dnode_phys_t's dn_nlevels to set > the value. If the value is getting set to zero by one of these routines you > may have corrupted something in the objset or the dnode_phys. Have you > investigated what is going on with these structures? Thats what I though to but I've looked at all the places where a dnode_t is translated into something else and none of them appear to be wrong. If I operate on an existing Version 3 pool I don't have any of these problems. This only happens when using a Version 4 (crypto is version 4 in my workspace) pool. Thanks for your suggestions, but I'm still stuck! -- Darren J Moffat