[pnfs] [PATCH] pnfs: initialize ds_[rw]size only after thelayout driver has registered
Muntz, Daniel
Dan.Muntz at netapp.com
Wed Jan 2 20:34:04 EST 2008
Two issues. One, a "bad" client shouldn't oops the 2.6.24 kernel no
matter which draft they're each on, so something needs to be fixed.
Two, the 2.6.18 client was working with the labiaga 2.6.24rc2 tree which
I thought was draft 13 compliant.
-----Original Message-----
From: Dean Hildebrand [mailto:seattleplus at gmail.com]
Sent: Wednesday, January 02, 2008 3:27 PM
To: Sager, Mike
Cc: pnfs at linux-nfs.org; Labiaga, Ricardo
Subject: Re: [pnfs] [PATCH] pnfs: initialize ds_[rw]size only after
thelayout driver has registered
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
>
_______________________________________________
pNFS mailing list
pNFS at linux-nfs.org
http://linux-nfs.org/cgi-bin/mailman/listinfo/pnfs
More information about the pNFS
mailing list