[pnfs] [PATCH] pnfs: initialize ds_[rw]size only after thelayout driver has registered
Ricardo Labiaga
ricardo.labiaga at netapp.com
Wed Jan 2 18:47:46 EST 2008
Benny volunteered to maintain the tree for the time being.
- ricardo
On Wed, 2008-01-02 at 15:26 -0800, Dean Hildebrand wrote:
> 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