Darren J Moffat wrote:
> 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!
> 

Not sure if you've already posted this or not, but do you have a webrev?

eric


Reply via email to