[pnfs] [PATCH] pnfs: initialize ds_[rw]size only after thelayout driver has registered

Dean Hildebrand seattleplus at gmail.com
Wed Jan 2 18:26:58 EST 2008


Thanks Ricardo.  I updated the wiki with that information.

Who will be updating this tree with the patches?

Sager, Mike wrote:
> As a sidenote, it appears this 2.6.24 repository isn't compatible with
> what I believe is the latest 2.6.18 client.  When I try it, the server
> oops due to a NULL pointer dereference with the following trace:
>   
The 2.6.18 code base did not make the jump to draft-13 after the 
bakeathon.  I believe Ricardo applied our bakeathon draft 13 patches to 
the 2.6.24 git tree, which I think Benny used to create his tree (via 
Andy).  I'm not sure of your specific error, but since it is in decode 
compound, I bet that is the problem.  The summary is that the 2.6.18 
code base is only compatible with itself.
Dean
>
> Call Trace:
>  [<c0369b48>] call_bind+0x65/0x6b
>  [<c0369bf9>] call_reserve+0x3c/0x65
>  [<c036fe9d>] __rpc_execute+0x6f/0x214
>  [<c036f768>] rpc_set_active+0x3a/0x5c
>  [<c036a632>] rpc_do_run_task+0x76/0x8f
>  [<c036b485>] rpc_call_async+0x1b/0x2d
>  [<c01ffc60>] nfsd41_probe_callback+0x1b8/0x213
>  [<c01282ed>] local_bh_enable_ip+0x40/0x56
>  [<c01fbccc>] nfsd4_create_session+0x132/0x340
>  [<c01fbb9a>] nfsd4_create_session+0x0/0x340
>  [<c01ee543>] nfsd4_proc_compound+0x272/0x3e9
>  [<c01f3cce>] nfs4svc_decode_compoundargs+0x0/0x5c
>  [<c01e0ad2>] nfsd_dispatch+0xd3/0x1a0
>  [<c03759ce>] svcauth_unix_set_client+0x176/0x1ac
>  [<c0372427>] svc_process+0x3be/0x66f
>  [<c0375249>] svc_recv+0x341/0x3b4
>  [<c01e1031>] nfsd+0x181/0x290
>  [<c01e0eb0>] nfsd+0x0/0x290
>  [<c0104b3b>] kernel_thread_helper+0x7/0x10
>
>
> What client are people using to test pnfs?  Last I heard, the
> 2.6.24-based client doesn't yet support pnfs.
>
> Mike
>
> -----Original Message-----
> From: Labiaga, Ricardo 
> Sent: Wednesday, January 02, 2008 2:35 PM
> To: Dean Hildebrand; Benny Halevy
> Cc: pnfs at linux-nfs.org
> Subject: Re: [pnfs] [PATCH] pnfs: initialize ds_[rw]size only after
> thelayout driver has registered
>
>
> Hi Dean,
>
> As I understand it, Benny is maintaining the new "golden" repository at:
>    git://linux-nfs.org/~bhalevy/linux-pnfs.git
>
> I have a clone and track the following branches:  nfs41 and pnfs.  I see
> there are other branches.  Private to Benny's work?
>
> At least I am working under that understanding based on our last pNFS
> concall.
>
> - ricardo 
>
>
>   
>> -----Original Message-----
>> From: Dean Hildebrand [mailto:seattleplus at gmail.com]
>> Sent: Wednesday, January 02, 2008 1:33 PM
>> To: Benny Halevy
>> Cc: pnfs at linux-nfs.org
>> Subject: Re: [pnfs] [PATCH] pnfs: initialize ds_[rw]size only 
>> after the layout driver has registered
>>
>> I'm confused with the large numbers of git repositories that we now
>> have.  My understanding of the process we were using (most 
>> recently) for 
>> 2.6.18 was
>> 1. Make change in local repository
>> 2. "git send-email --to pnfs at linux-nfs.org  ..." your changes
>> 3. Andy or Bruce would apply the patches to the pNFS 
>> repository (or do a 
>> git pull I guess)
>>
>> If this is still the process, what is the git repository I
>> should pull 
>> from for step 1 and then have andy/bruce push to for step 3?  Is it 
>> Benny's?  Benny, are the patches you sending out in your local 
>> repository or the one you created at citi?  Once all of the 
>> patches are 
>> approved, to which git tree will they be applied?
>>
>> If someone knows, can they update the wiki?
>> Dean
>>
>> Benny Halevy wrote:
>>     
>>> Currently, nfs_server_set_fsinfo, which sets the DS I/O
>>>       
>> sizes, is being called
>>     
>>> before pnfs has been initialized.
>>>
>>> Signed-off-by: Benny Halevy <bhalevy at panasas.com>
>>> ---
>>>  fs/nfs/client.c |   15 ---------------
>>>  fs/nfs/pnfs.c   |   22 ++++++++++++++++++++++
>>>  fs/nfs/pnfs.h   |    1 +
>>>  fs/nfs/super.c  |    1 +
>>>  4 files changed, 24 insertions(+), 15 deletions(-)
>>>
>>> diff --git a/fs/nfs/client.c b/fs/nfs/client.c
>>> index f96aa40..6db3b83 100644
>>> --- a/fs/nfs/client.c
>>> +++ b/fs/nfs/client.c
>>> @@ -620,9 +620,6 @@ error:
>>>  static void nfs_server_set_fsinfo(struct nfs_server
>>>       
>> *server, struct nfs_fsinfo *fsinfo)
>>     
>>>  {
>>>  	unsigned long max_rpc_payload;
>>> -#ifdef CONFIG_PNFS
>>> -	unsigned long dssize;
>>> -#endif
>>>  
>>>  	/* Work out a lot of parameters */
>>>  	if (server->rsize == 0)
>>> @@ -652,18 +649,6 @@ static void
>>>       
>> nfs_server_set_fsinfo(struct nfs_server *server, struct nfs_fsinfo *
>>     
>>>  #ifdef CONFIG_PNFS
>>>  	/* Save the layout type for use during init of layout driver */
>>>  	server->pnfs_fs_ltype = fsinfo->layoutclass;
>>> -
>>> -	/* Set buffer size for data servers */
>>> -	dssize = pnfs_getiosize(server);
>>> -	if (dssize > 0) {
>>> -		server->ds_rsize = server->ds_wsize = 
>>>       
>> nfs_block_size(dssize, NULL);
>>     
>>> -		server->ds_rpages = server->ds_wpages = 
>>>       
>> (server->ds_rsize + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT;
>>     
>>> -	} else {
>>> -		server->ds_wsize = server->wsize;
>>> -		server->ds_rsize = server->rsize;
>>> -		server->ds_rpages = server->rpages;
>>> -		server->ds_wpages = server->wpages;
>>> -	}
>>>  #endif /* CONFIG_PNFS */
>>>  
>>>  	server->wtmult = nfs_block_bits(fsinfo->wtmult, NULL); diff
>>>       
> --git 
>   
>>> a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c index ca99c44..d49f9ce 100644
>>> --- a/fs/nfs/pnfs.c
>>> +++ b/fs/nfs/pnfs.c
>>> @@ -46,6 +46,8 @@
>>>  #include <linux/pnfs_xdr.h>
>>>  #include <linux/nfs4_pnfs.h>
>>>  
>>> +#include "internal.h"
>>> +
>>>  #include "nfs4_fs.h"
>>>  #include "pnfs.h"
>>>  
>>> @@ -859,6 +861,26 @@ pnfs_getiosize(struct nfs_server *server)
>>>  	return ld->ld_policy_ops->get_blocksize(mounttype);
>>>  }
>>>  
>>> +void
>>> +pnfs_set_ds_iosize(struct nfs_server *server)
>>> +{
>>> +	unsigned dssize = pnfs_getiosize(server);
>>> +
>>> +	/* Set buffer size for data servers */
>>> +	if (dssize > 0) {
>>> +		server->ds_rsize = server->ds_wsize =
>>> +			nfs_block_size(dssize, NULL);
>>> +		server->ds_rpages = server->ds_wpages =
>>> +			(server->ds_rsize + PAGE_CACHE_SIZE - 1) >>
>>> +			PAGE_CACHE_SHIFT;
>>> +	} else {
>>> +		server->ds_wsize = server->wsize;
>>> +		server->ds_rsize = server->rsize;
>>> +		server->ds_rpages = server->rpages;
>>> +		server->ds_wpages = server->wpages;
>>> +	}
>>> +}
>>> +
>>>  /* Invoked by all non-NFSv4 I/O layout drivers to mark
>>>       
>> pages for commit
>>     
>>>   */
>>>  static void
>>> diff --git a/fs/nfs/pnfs.h b/fs/nfs/pnfs.h
>>> index 50e3797..bb7b091 100644
>>> --- a/fs/nfs/pnfs.h
>>> +++ b/fs/nfs/pnfs.h
>>> @@ -46,6 +46,7 @@ int pnfs_enabled_sb(struct nfs_server *nfss);  int
>>>       
>
>   
>>> pnfs_use_nfsv4_wproto(struct inode *inode, ssize_t count);  int 
>>> pnfs_use_nfsv4_rproto(struct inode *inode, ssize_t count);  unsigned
>>>       
>
>   
>>> int pnfs_getiosize(struct nfs_server *server);
>>> +void pnfs_set_ds_iosize(struct nfs_server *server);
>>>  int pnfs_commit(struct inode *inode, struct list_head
>>>       
>> *head, int sync, struct nfs_write_data *data);
>>     
>>>  int pnfs_try_to_commit(struct inode *, struct
>>>       
>> nfs_write_data *, struct list_head *, int);
>>     
>>>  int pnfs_wsize(struct inode *, unsigned int, struct
>>>       
>> nfs_write_data *);
>>     
>>> diff --git a/fs/nfs/super.c b/fs/nfs/super.c
>>> index b4aecb1..bb6ffa2 100644
>>> --- a/fs/nfs/super.c
>>> +++ b/fs/nfs/super.c
>>> @@ -1705,6 +1705,7 @@ int nfs4_init_pnfs(struct super_block
>>>       
>> *sb, struct nfs_server *server,
>>     
>>>  	switch (clp->cl_minorversion) {
>>>  	case 1:
>>>  		set_pnfs_layoutdriver(sb, fh, server->pnfs_fs_ltype);
>>> +		pnfs_set_ds_iosize(server);
>>>  		break;
>>>  	case 0:
>>>  		break;
>>>   
>>>       
>> _______________________________________________
>> 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