[pnfs] [PATCH] wrong hold count on clr_ref
Benny Halevy
bhalevy at panasas.com
Mon Jun 4 20:28:47 EDT 2007
Marc Eshel wrote:
> The first change is needed since know we have a compound rpc with 2 ops.
> Problem 6 still needs be fixed and until we do comment the BUG_ON so we
> can see the layout return working.
>
> 6. The serve is not waiting for the client to return the layout before
> calling destroy_layoutrecall() it because the hold count clr_ref is not
> set correctly. This problem is not fixed except for removing the BUG that
> causes the crash.
The BUG_ON causes the crash on purpose and it's right,
removing it just invites trouble down the road.
Can you please try adding a kref_get(&clr->clr_ref)
in hash_layoutrecall instead? This was the original intent...
>
>> From: Marc Eshel <eshel at almaden.ibm.com>
>>
>>
>> ---
>>
>> fs/nfsd/nfs4callback.c | 2 +-
>> fs/nfsd/nfs4state.c | 2 +-
>> 2 files changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c
>> index b7bc5c3..da20278 100644
>> --- a/fs/nfsd/nfs4callback.c
>> +++ b/fs/nfsd/nfs4callback.c
>> @@ -413,7 +413,7 @@ nfs41_xdr_enc_cb_layout(struct rpc_rqst
>> struct nfs4_layoutrecall *args = rpc_args->args_op;
>> struct nfs4_cb_compound_hdr hdr = {
>> .ident = 0,
>> - .nops = 1,
>> + .nops = 2,
>> };
>>
>> xdr_init_encode(&xdr, &req->rq_snd_buf, p);
>> diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
>> index 2fe5414..e48f08d 100644
>> --- a/fs/nfsd/nfs4state.c
>> +++ b/fs/nfsd/nfs4state.c
>> @@ -4029,7 +4029,7 @@ destroy_layoutrecall(struct kref *kref)
>> container_of(kref, struct nfs4_layoutrecall, clr_ref);
>> dprintk("pNFS %s: clr %p fp %p clp %p\n", __FUNCTION__, clr,
>> clr->clr_file, clr->clr_client);
>> - BUG_ON(!list_empty(&clr->clr_perclnt));
>> +//??? BUG_ON(!list_empty(&clr->clr_perclnt));
>> if (clr->clr_file)
>> put_nfs4_file(clr->clr_file);
>> kmem_cache_free(pnfs_layoutrecall_slab, clr);
>> _______________________________________________
>> pNFS mailing list
>> pNFS at linux-nfs.org
>> http://linux-nfs.org/cgi-bin/mailman/listinfo/pnfs
>
> _______________________________________________
> pNFS mailing list
> pNFS at linux-nfs.org
> http://linux-nfs.org/cgi-bin/mailman/listinfo/pnfs
More information about the pNFS
mailing list