[pnfs] [PATCH] pnfs: initialize ds_[rw]size only after the layout driver has registered
Dean Hildebrand
seattleplus at gmail.com
Wed Jan 2 16:32:46 EST 2008
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;
>
More information about the pNFS
mailing list