From: Anna Schumaker <schumaker.anna@gmail.com>
To: Christoph Hellwig <hch@lst.de>,
Trond Myklebust <trond.myklebust@primarydata.com>
Cc: Anna Schumaker <Anna.Schumaker@netapp.com>, linux-nfs@vger.kernel.org
Subject: Re: [PATCH 2/2] nfs: remove ->read_pageio_init from rpc ops
Date: Thu, 17 Apr 2014 10:50:15 -0400 [thread overview]
Message-ID: <534FEA27.5060600@gmail.com> (raw)
In-Reply-To: <1397653642-17833-3-git-send-email-hch@lst.de>
On 04/16/2014 09:07 AM, Christoph Hellwig wrote:
> The read_pageio_init method is just a very convoluted way to grab the
> right nfs_pageio_ops vector. The vector to chose is not a choice of
> protocol version, but just a pNFS vs MDS I/O choice that can simply be
> done inside nfs_pageio_init_write based on the presence of a layout
> driver, and a new force_mds flag to the special case of falling back
> to MDS I/O on a pNFS-capable volume.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
The commit message for this patch needs to change "nfs_pageio_init_write" into "nfs_pageio_init_read". I haven't had any problems with the code!
Tested-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
> ---
> fs/nfs/direct.c | 2 +-
> fs/nfs/internal.h | 2 +-
> fs/nfs/nfs3proc.c | 1 -
> fs/nfs/nfs4proc.c | 1 -
> fs/nfs/pnfs.c | 15 +--------------
> fs/nfs/pnfs.h | 9 ---------
> fs/nfs/proc.c | 1 -
> fs/nfs/read.c | 19 ++++++++++++++-----
> include/linux/nfs_xdr.h | 2 --
> 9 files changed, 17 insertions(+), 35 deletions(-)
>
> diff --git a/fs/nfs/direct.c b/fs/nfs/direct.c
> index 6a31102..bbe688e 100644
> --- a/fs/nfs/direct.c
> +++ b/fs/nfs/direct.c
> @@ -424,7 +424,7 @@ static ssize_t nfs_direct_read_schedule_iovec(struct nfs_direct_req *dreq,
> size_t requested_bytes = 0;
> unsigned long seg;
>
> - NFS_PROTO(dreq->inode)->read_pageio_init(&desc, dreq->inode,
> + nfs_pageio_init_read(&desc, dreq->inode, false,
> &nfs_direct_read_completion_ops);
> get_dreq(dreq);
> desc.pg_dreq = dreq;
> diff --git a/fs/nfs/internal.h b/fs/nfs/internal.h
> index 8431083..98fe618 100644
> --- a/fs/nfs/internal.h
> +++ b/fs/nfs/internal.h
> @@ -398,7 +398,7 @@ struct nfs_pgio_completion_ops;
> extern struct nfs_read_header *nfs_readhdr_alloc(void);
> extern void nfs_readhdr_free(struct nfs_pgio_header *hdr);
> extern void nfs_pageio_init_read(struct nfs_pageio_descriptor *pgio,
> - struct inode *inode,
> + struct inode *inode, bool force_mds,
> const struct nfs_pgio_completion_ops *compl_ops);
> extern int nfs_initiate_read(struct rpc_clnt *clnt,
> struct nfs_read_data *data,
> diff --git a/fs/nfs/nfs3proc.c b/fs/nfs/nfs3proc.c
> index e984880..d873241 100644
> --- a/fs/nfs/nfs3proc.c
> +++ b/fs/nfs/nfs3proc.c
> @@ -947,7 +947,6 @@ const struct nfs_rpc_ops nfs_v3_clientops = {
> .pathconf = nfs3_proc_pathconf,
> .decode_dirent = nfs3_decode_dirent,
> .read_setup = nfs3_proc_read_setup,
> - .read_pageio_init = nfs_pageio_init_read,
> .read_rpc_prepare = nfs3_proc_read_rpc_prepare,
> .read_done = nfs3_read_done,
> .write_setup = nfs3_proc_write_setup,
> diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
> index 8da0c62..21cd1f2 100644
> --- a/fs/nfs/nfs4proc.c
> +++ b/fs/nfs/nfs4proc.c
> @@ -8433,7 +8433,6 @@ const struct nfs_rpc_ops nfs_v4_clientops = {
> .set_capabilities = nfs4_server_capabilities,
> .decode_dirent = nfs4_decode_dirent,
> .read_setup = nfs4_proc_read_setup,
> - .read_pageio_init = pnfs_pageio_init_read,
> .read_rpc_prepare = nfs4_proc_read_rpc_prepare,
> .read_done = nfs4_read_done,
> .write_setup = nfs4_proc_write_setup,
> diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
> index 9edac9f..3d5bc2b 100644
> --- a/fs/nfs/pnfs.c
> +++ b/fs/nfs/pnfs.c
> @@ -1434,19 +1434,6 @@ pnfs_generic_pg_init_write(struct nfs_pageio_descriptor *pgio,
> }
> EXPORT_SYMBOL_GPL(pnfs_generic_pg_init_write);
>
> -void
> -pnfs_pageio_init_read(struct nfs_pageio_descriptor *pgio, struct inode *inode,
> - const struct nfs_pgio_completion_ops *compl_ops)
> -{
> - struct nfs_server *server = NFS_SERVER(inode);
> - struct pnfs_layoutdriver_type *ld = server->pnfs_curr_ld;
> -
> - if (ld == NULL)
> - nfs_pageio_init_read(pgio, inode, compl_ops);
> - else
> - nfs_pageio_init(pgio, inode, ld->pg_read_ops, compl_ops, server->rsize, 0);
> -}
> -
> bool
> pnfs_generic_pg_test(struct nfs_pageio_descriptor *pgio, struct nfs_page *prev,
> struct nfs_page *req)
> @@ -1641,7 +1628,7 @@ int pnfs_read_done_resend_to_mds(struct inode *inode,
> LIST_HEAD(failed);
>
> /* Resend all requests through the MDS */
> - nfs_pageio_init_read(&pgio, inode, compl_ops);
> + nfs_pageio_init_read(&pgio, inode, true, compl_ops);
> pgio.pg_dreq = dreq;
> while (!list_empty(head)) {
> struct nfs_page *req = nfs_list_entry(head->next);
> diff --git a/fs/nfs/pnfs.h b/fs/nfs/pnfs.h
> index e9ac8fb..94a9a18 100644
> --- a/fs/nfs/pnfs.h
> +++ b/fs/nfs/pnfs.h
> @@ -180,9 +180,6 @@ extern int nfs4_proc_layoutreturn(struct nfs4_layoutreturn *lrp);
> void pnfs_get_layout_hdr(struct pnfs_layout_hdr *lo);
> void pnfs_put_lseg(struct pnfs_layout_segment *lseg);
>
> -void pnfs_pageio_init_read(struct nfs_pageio_descriptor *, struct inode *,
> - const struct nfs_pgio_completion_ops *);
> -
> void set_pnfs_layoutdriver(struct nfs_server *, const struct nfs_fh *, u32);
> void unset_pnfs_layoutdriver(struct nfs_server *);
> void pnfs_generic_pg_init_read(struct nfs_pageio_descriptor *, struct nfs_page *);
> @@ -459,12 +456,6 @@ static inline void unset_pnfs_layoutdriver(struct nfs_server *s)
> {
> }
>
> -static inline void pnfs_pageio_init_read(struct nfs_pageio_descriptor *pgio, struct inode *inode,
> - const struct nfs_pgio_completion_ops *compl_ops)
> -{
> - nfs_pageio_init_read(pgio, inode, compl_ops);
> -}
> -
> static inline int
> pnfs_commit_list(struct inode *inode, struct list_head *mds_pages, int how,
> struct nfs_commit_info *cinfo)
> diff --git a/fs/nfs/proc.c b/fs/nfs/proc.c
> index f9cc295..8cc227f 100644
> --- a/fs/nfs/proc.c
> +++ b/fs/nfs/proc.c
> @@ -735,7 +735,6 @@ const struct nfs_rpc_ops nfs_v2_clientops = {
> .pathconf = nfs_proc_pathconf,
> .decode_dirent = nfs2_decode_dirent,
> .read_setup = nfs_proc_read_setup,
> - .read_pageio_init = nfs_pageio_init_read,
> .read_rpc_prepare = nfs_proc_read_rpc_prepare,
> .read_done = nfs_read_done,
> .write_setup = nfs_proc_write_setup,
> diff --git a/fs/nfs/read.c b/fs/nfs/read.c
> index 411aedd..7f87461 100644
> --- a/fs/nfs/read.c
> +++ b/fs/nfs/read.c
> @@ -24,6 +24,7 @@
> #include "internal.h"
> #include "iostat.h"
> #include "fscache.h"
> +#include "pnfs.h"
>
> #define NFSDBG_FACILITY NFSDBG_PAGECACHE
>
> @@ -114,11 +115,17 @@ int nfs_return_empty_page(struct page *page)
> }
>
> void nfs_pageio_init_read(struct nfs_pageio_descriptor *pgio,
> - struct inode *inode,
> + struct inode *inode, bool force_mds,
> const struct nfs_pgio_completion_ops *compl_ops)
> {
> - nfs_pageio_init(pgio, inode, &nfs_pageio_read_ops, compl_ops,
> - NFS_SERVER(inode)->rsize, 0);
> + struct nfs_server *server = NFS_SERVER(inode);
> + const struct nfs_pageio_ops *pg_ops = &nfs_pageio_read_ops;
> +
> +#ifdef CONFIG_NFS_V4_1
> + if (server->pnfs_curr_ld && !force_mds)
> + pg_ops = server->pnfs_curr_ld->pg_read_ops;
> +#endif
> + nfs_pageio_init(pgio, inode, pg_ops, compl_ops, server->rsize, 0);
> }
> EXPORT_SYMBOL_GPL(nfs_pageio_init_read);
>
> @@ -147,7 +154,8 @@ int nfs_readpage_async(struct nfs_open_context *ctx, struct inode *inode,
> if (len < PAGE_CACHE_SIZE)
> zero_user_segment(page, len, PAGE_CACHE_SIZE);
>
> - NFS_PROTO(inode)->read_pageio_init(&pgio, inode, &nfs_async_read_completion_ops);
> + nfs_pageio_init_read(&pgio, inode, false,
> + &nfs_async_read_completion_ops);
> nfs_pageio_add_request(&pgio, new);
> nfs_pageio_complete(&pgio);
> NFS_I(inode)->read_io += pgio.pg_bytes_written;
> @@ -654,7 +662,8 @@ int nfs_readpages(struct file *filp, struct address_space *mapping,
> if (ret == 0)
> goto read_complete; /* all pages were read */
>
> - NFS_PROTO(inode)->read_pageio_init(&pgio, inode, &nfs_async_read_completion_ops);
> + nfs_pageio_init_read(&pgio, inode, false,
> + &nfs_async_read_completion_ops);
>
> ret = read_cache_pages(mapping, pages, readpage_async_filler, &desc);
>
> diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h
> index 78216f8..3e8fc1f 100644
> --- a/include/linux/nfs_xdr.h
> +++ b/include/linux/nfs_xdr.h
> @@ -1466,8 +1466,6 @@ struct nfs_rpc_ops {
> int (*set_capabilities)(struct nfs_server *, struct nfs_fh *);
> int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, int);
> void (*read_setup) (struct nfs_read_data *, struct rpc_message *);
> - void (*read_pageio_init)(struct nfs_pageio_descriptor *, struct inode *,
> - const struct nfs_pgio_completion_ops *);
> int (*read_rpc_prepare)(struct rpc_task *, struct nfs_read_data *);
> int (*read_done) (struct rpc_task *, struct nfs_read_data *);
> void (*write_setup) (struct nfs_write_data *, struct rpc_message *);
next prev parent reply other threads:[~2014-04-17 14:58 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-16 13:07 pageio_init simplifications, V2 Christoph Hellwig
2014-04-16 13:07 ` [PATCH 1/2] nfs: remove ->write_pageio_init from rpc ops Christoph Hellwig
2014-04-17 14:50 ` Anna Schumaker
2014-04-16 13:07 ` [PATCH 2/2] nfs: remove ->read_pageio_init " Christoph Hellwig
2014-04-17 14:50 ` Anna Schumaker [this message]
2014-05-28 23:01 ` pageio_init simplifications, V2 Trond Myklebust
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=534FEA27.5060600@gmail.com \
--to=schumaker.anna@gmail.com \
--cc=Anna.Schumaker@netapp.com \
--cc=hch@lst.de \
--cc=linux-nfs@vger.kernel.org \
--cc=trond.myklebust@primarydata.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.