nfs: allow to specify cred in nfs_initiate_pgio
authorPeng Tao <tao.peng@primarydata.com>
Fri, 13 Jun 2014 15:02:25 +0000 (23:02 +0800)
committerTom Haynes <loghyr@primarydata.com>
Tue, 3 Feb 2015 19:06:37 +0000 (11:06 -0800)
so that flexfile layout client can pass in DS credential instead of
using user cred, which will be done in the next patch.

Signed-off-by: Peng Tao <tao.peng@primarydata.com>
Signed-off-by: Tom Haynes <Thomas.Haynes@primarydata.com>
fs/nfs/filelayout/filelayout.c
fs/nfs/internal.h
fs/nfs/pagelist.c

index e5a3c5b1398f9fee75f0be1badf070314ca27daf..bfa8547eb2d660666db98d00f9bde43a9af22090 100644 (file)
@@ -501,8 +501,9 @@ filelayout_read_pagelist(struct nfs_pgio_header *hdr)
        hdr->mds_offset = offset;
 
        /* Perform an asynchronous read to ds */
-       nfs_initiate_pgio(ds_clnt, hdr, NFS_PROTO(hdr->inode),
-                           &filelayout_read_call_ops, 0, RPC_TASK_SOFTCONN);
+       nfs_initiate_pgio(ds_clnt, hdr, hdr->cred,
+                         NFS_PROTO(hdr->inode), &filelayout_read_call_ops,
+                         0, RPC_TASK_SOFTCONN);
        return PNFS_ATTEMPTED;
 }
 
@@ -542,9 +543,9 @@ filelayout_write_pagelist(struct nfs_pgio_header *hdr, int sync)
        hdr->args.offset = filelayout_get_dserver_offset(lseg, offset);
 
        /* Perform an asynchronous write */
-       nfs_initiate_pgio(ds_clnt, hdr, NFS_PROTO(hdr->inode),
-                                   &filelayout_write_call_ops, sync,
-                                   RPC_TASK_SOFTCONN);
+       nfs_initiate_pgio(ds_clnt, hdr, hdr->cred,
+                         NFS_PROTO(hdr->inode), &filelayout_write_call_ops,
+                         sync, RPC_TASK_SOFTCONN);
        return PNFS_ATTEMPTED;
 }
 
index 98dee834e9d6396a2ebc4afd46acdd3e59d809df..e9305e98b78218b1e7b1d5cf4effd79bab10288c 100644 (file)
@@ -250,9 +250,9 @@ struct nfs_pgio_header *nfs_pgio_header_alloc(const struct nfs_rw_ops *);
 void nfs_pgio_header_free(struct nfs_pgio_header *);
 void nfs_pgio_data_destroy(struct nfs_pgio_header *);
 int nfs_generic_pgio(struct nfs_pageio_descriptor *, struct nfs_pgio_header *);
-int nfs_initiate_pgio(struct rpc_clnt *, struct nfs_pgio_header *,
-                     const struct nfs_rpc_ops *,
-                     const struct rpc_call_ops *, int, int);
+int nfs_initiate_pgio(struct rpc_clnt *clnt, struct nfs_pgio_header *hdr,
+                     struct rpc_cred *cred, const struct nfs_rpc_ops *rpc_ops,
+                     const struct rpc_call_ops *call_ops, int how, int flags);
 void nfs_free_request(struct nfs_page *req);
 
 static inline void nfs_iocounter_init(struct nfs_io_counter *c)
index 35a2626a6922d11e11c5a60018630b14ca55e9a0..c4d175829880ebea6f484210eea24d7907bcbddc 100644 (file)
@@ -597,14 +597,14 @@ static void nfs_pgio_prepare(struct rpc_task *task, void *calldata)
 }
 
 int nfs_initiate_pgio(struct rpc_clnt *clnt, struct nfs_pgio_header *hdr,
-                     const struct nfs_rpc_ops *rpc_ops,
+                     struct rpc_cred *cred, const struct nfs_rpc_ops *rpc_ops,
                      const struct rpc_call_ops *call_ops, int how, int flags)
 {
        struct rpc_task *task;
        struct rpc_message msg = {
                .rpc_argp = &hdr->args,
                .rpc_resp = &hdr->res,
-               .rpc_cred = hdr->cred,
+               .rpc_cred = cred,
        };
        struct rpc_task_setup task_setup_data = {
                .rpc_client = clnt,
@@ -793,7 +793,9 @@ static int nfs_generic_pg_pgios(struct nfs_pageio_descriptor *desc)
        ret = nfs_generic_pgio(desc, hdr);
        if (ret == 0)
                ret = nfs_initiate_pgio(NFS_CLIENT(hdr->inode),
-                                       hdr, NFS_PROTO(hdr->inode),
+                                       hdr,
+                                       hdr->cred,
+                                       NFS_PROTO(hdr->inode),
                                        desc->pg_rpc_callops,
                                        desc->pg_ioflags, 0);
        return ret;