NFS: Create a common generic_pg_pgios()
authorAnna Schumaker <Anna.Schumaker@netapp.com>
Tue, 6 May 2014 13:12:39 +0000 (09:12 -0400)
committerTrond Myklebust <trond.myklebust@primarydata.com>
Thu, 29 May 2014 15:11:41 +0000 (11:11 -0400)
What we have here is two functions that look identical.  Let's share
some more code!

Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
fs/nfs/internal.h
fs/nfs/pagelist.c
fs/nfs/read.c
fs/nfs/write.c

index 886273a8916b0037b45d322aee6b938556aa030a..29e99aac3673f9a914a18e0e73a45f626a5bcd86 100644 (file)
@@ -243,7 +243,7 @@ void nfs_pgio_data_release(struct nfs_pgio_data *);
 int nfs_generic_pgio(struct nfs_pageio_descriptor *, struct nfs_pgio_header *);
 int nfs_initiate_pgio(struct rpc_clnt *, struct nfs_pgio_data *,
                      const struct rpc_call_ops *, int, int);
-int nfs_do_multiple_pgios(struct list_head *, const struct rpc_call_ops *, int);
+int nfs_generic_pg_pgios(struct nfs_pageio_descriptor *);
 
 static inline void nfs_iocounter_init(struct nfs_io_counter *c)
 {
index 2471e0278811aa90592bbc2b73bb0274a99a53e8..83d4ab46a2e9d98a234d7efc8781a0371f594d48 100644 (file)
@@ -493,7 +493,7 @@ out:
 }
 EXPORT_SYMBOL_GPL(nfs_initiate_pgio);
 
-int nfs_do_multiple_pgios(struct list_head *head,
+static int nfs_do_multiple_pgios(struct list_head *head,
                                 const struct rpc_call_ops *call_ops,
                                 int how)
 {
@@ -688,6 +688,30 @@ static int nfs_pgio_one(struct nfs_pageio_descriptor *desc,
        return 0;
 }
 
+int nfs_generic_pg_pgios(struct nfs_pageio_descriptor *desc)
+{
+       struct nfs_rw_header *rw_hdr;
+       struct nfs_pgio_header *hdr;
+       int ret;
+
+       rw_hdr = nfs_rw_header_alloc(desc->pg_rw_ops);
+       if (!rw_hdr) {
+               desc->pg_completion_ops->error_cleanup(&desc->pg_list);
+               return -ENOMEM;
+       }
+       hdr = &rw_hdr->header;
+       nfs_pgheader_init(desc, hdr, nfs_rw_header_free);
+       atomic_inc(&hdr->refcnt);
+       ret = nfs_generic_pgio(desc, hdr);
+       if (ret == 0)
+               ret = nfs_do_multiple_pgios(&hdr->rpc_list,
+                                           desc->pg_rpc_callops,
+                                           desc->pg_ioflags);
+       if (atomic_dec_and_test(&hdr->refcnt))
+               hdr->completion_ops->completion(hdr);
+       return ret;
+}
+
 int nfs_generic_pgio(struct nfs_pageio_descriptor *desc,
                     struct nfs_pgio_header *hdr)
 {
index b834d458a2b6d8906f4a09492565de0f0df547c0..ebd1666ee13cf9a3505a6004d0fd6d747e98ae28 100644 (file)
@@ -178,32 +178,9 @@ static const struct nfs_pgio_completion_ops nfs_async_read_completion_ops = {
        .completion = nfs_read_completion,
 };
 
-static int nfs_generic_pg_readpages(struct nfs_pageio_descriptor *desc)
-{
-       struct nfs_rw_header *rhdr;
-       struct nfs_pgio_header *hdr;
-       int ret;
-
-       rhdr = nfs_rw_header_alloc(desc->pg_rw_ops);
-       if (!rhdr) {
-               desc->pg_completion_ops->error_cleanup(&desc->pg_list);
-               return -ENOMEM;
-       }
-       hdr = &rhdr->header;
-       nfs_pgheader_init(desc, hdr, nfs_rw_header_free);
-       atomic_inc(&hdr->refcnt);
-       ret = nfs_generic_pgio(desc, hdr);
-       if (ret == 0)
-               ret = nfs_do_multiple_pgios(&hdr->rpc_list,
-                                           desc->pg_rpc_callops, 0);
-       if (atomic_dec_and_test(&hdr->refcnt))
-               hdr->completion_ops->completion(hdr);
-       return ret;
-}
-
 static const struct nfs_pageio_ops nfs_pageio_read_ops = {
        .pg_test = nfs_generic_pg_test,
-       .pg_doio = nfs_generic_pg_readpages,
+       .pg_doio = nfs_generic_pg_pgios,
 };
 
 /*
index d3fa181053add276e608eb4154942ee5fd8ebacf..31a8b29e402608e7c194e455cf0cae210a8938e9 100644 (file)
@@ -973,33 +973,9 @@ static const struct nfs_pgio_completion_ops nfs_async_write_completion_ops = {
        .completion = nfs_write_completion,
 };
 
-static int nfs_generic_pg_writepages(struct nfs_pageio_descriptor *desc)
-{
-       struct nfs_rw_header *whdr;
-       struct nfs_pgio_header *hdr;
-       int ret;
-
-       whdr = nfs_rw_header_alloc(desc->pg_rw_ops);
-       if (!whdr) {
-               desc->pg_completion_ops->error_cleanup(&desc->pg_list);
-               return -ENOMEM;
-       }
-       hdr = &whdr->header;
-       nfs_pgheader_init(desc, hdr, nfs_rw_header_free);
-       atomic_inc(&hdr->refcnt);
-       ret = nfs_generic_pgio(desc, hdr);
-       if (ret == 0)
-               ret = nfs_do_multiple_pgios(&hdr->rpc_list,
-                                            desc->pg_rpc_callops,
-                                            desc->pg_ioflags);
-       if (atomic_dec_and_test(&hdr->refcnt))
-               hdr->completion_ops->completion(hdr);
-       return ret;
-}
-
 static const struct nfs_pageio_ops nfs_pageio_write_ops = {
        .pg_test = nfs_generic_pg_test,
-       .pg_doio = nfs_generic_pg_writepages,
+       .pg_doio = nfs_generic_pg_pgios,
 };
 
 void nfs_pageio_init_write(struct nfs_pageio_descriptor *pgio,