On 04/08/10 11:22 +0200, Jan Kryl wrote:
> On 04/08/10 16:07 +0900, Jorgen Lundman wrote:
> > 
> > Since the message that we frequently see before we have trouble comes from 
> > this code:
> > 
> > 6719 oo = rfs4_findopenowner(owner, &create, args->seqid);
> > 6720 if (oo == NULL) {
> > 6721 *cs->statusp = resp->status = NFS4ERR_STALE_CLIENTID;
> > 
> > 
> > 
> > and the function rfs4_findopenowner() calls rfs4_dbsearch(), whose first 
> > line is:
> > 
> > 522 NFS4_DEBUG(table->debug & SEARCH_DEBUG,
> > 523           (CE_NOTE, "Searching for key %p in table %s by %s",
> > 524            key, table->name, idx->keyname));
> > 
> > I thought it would be interesting to enable this message.
> > 
> > Ie, set SEARCH_DEBUG for NFS4_DEBUG. It would appear that it comes from:
> > 
> > rfs4_table_create()
> > 
> > rfs4_database_create(uint32_t flags)
> > 
> > rfs4_server_state = rfs4_database_create(rfs4_database_debug);
> > 
> > static uint32_t rfs4_database_debug = 0x00;
> > 
> > 
> > 
> > And since SEARCH_DEBUG is 0x0001, I have attempted to set:
> > 
> > # mdb -kw
> > > rfs4_database_debug/D
> > rfs4_database_debug:
> > rfs4_database_debug:            0
> > > rfs4_database_debug/W0t1
> > > rfs4_database_debug/D
> > rfs4_database_debug:
> > rfs4_database_debug:            1
> > 
> > but also I added /etc/system
> > 
> > set nfssrv:rfs4_database_debug=1
> > 
> > with a reboot.
> > 
> > 
> > 
> > I can confirm that rfs4_database_debug is now set to 1.
> > 
> > But I don't see a huge amount of debug info that I somewhat expected to 
> > see. It uses CNM_NOTE, which I assume will be picked up by kern.debug and 
> > placed in /var/adm/messages. Is this not correct?
> > 
> I haven't debugged nfsv4 state database tables yet, but the steps
> which you have outlined above look ok. Can you verify from mdb
> that SEARCH_DEBUG is set in openowner table?
> 
> <snip>
> rfs4_openowner_idx::print rfs4_index_t dbi_table->dbt_debug
> </snip>
> 
> If it's not set then you might solve this problem by setting
> dbt_debug for this particular table to 1.
> 
Marcel is right! Please disregard my answer above. If you don't
want to compile DEBUG kernel, then alternative is to use
dtrace to do the something like this:

<snip>
fbt:nfssrv:rfs4_findopenowner:entry
{
        self->traceme = 1;
}

fbt:nfssrv:rfs4_dbsearch:entry
/self->traceme/
{
        printf("%s %p ...", stringof(args[0]->dbi_keyname), args[1]);
}

fbt:nfssrv:rfs4_findopenowner:return
{
        self->traceme = 0;
}
</snip>

cheers
-jan
_______________________________________________
nfs-discuss mailing list
[email protected]

Reply via email to