[pnfs] [PATCH 14/29] pnfs: data server read validate and release
Benny Halevy
bhalevy at panasas.com
Fri Dec 28 03:45:12 EST 2007
From: Andy Adamson <andros at umich.edu>
Use the rpc_call_ops read validate and release functions to setup the
NFSv4.1 communication using the data server session.
Signed-off-by: Andy Adamson<andros at umich.edu>
Signed-off-by: Benny Halevy <bhalevy at panasas.com>
---
fs/nfs/nfs4filelayout.c | 9 +++++----
fs/nfs/read.c | 5 +++++
include/linux/nfs_xdr.h | 2 +-
3 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/fs/nfs/nfs4filelayout.c b/fs/nfs/nfs4filelayout.c
index f4e8ea3..e493f3a 100644
--- a/fs/nfs/nfs4filelayout.c
+++ b/fs/nfs/nfs4filelayout.c
@@ -239,7 +239,9 @@ static void filelayout_write_call_done(struct rpc_task *task, void *data)
}
struct rpc_call_ops filelayout_read_call_ops = {
+ .rpc_call_validate_args = nfs_read_validate,
.rpc_call_done = filelayout_read_call_done,
+ .rpc_release = nfs_readdata_release,
};
struct rpc_call_ops filelayout_write_call_ops = {
@@ -274,7 +276,6 @@ ssize_t filelayout_read_pagelist(
struct nfs4_filelayout *nfslay = NULL;
struct nfs4_pnfs_dserver dserver;
int status;
- struct nfs_server *server = NFS_SERVER(inode);
if (layoutid) {
nfslay = (struct nfs4_filelayout *)layoutid->layoutid;
@@ -288,7 +289,7 @@ ssize_t filelayout_read_pagelist(
printk(KERN_ERR "%s: dserver get failed status %d use MDS\n",
__FUNCTION__, status);
data->pnfs_client = NFS_CLIENT(inode);
- data->session = server->session;
+ data->ds_nfs_client = NULL;
data->args.fh = NFS_FH(inode);
status = 0;
} else {
@@ -296,7 +297,7 @@ ssize_t filelayout_read_pagelist(
/* just try the first data server for the index..*/
data->pnfs_client = ds->ds_clp->cl_rpcclient;
- data->session = ds->ds_clp->cl_ds_session;
+ data->ds_nfs_client = ds->ds_clp;
data->args.fh = dserver.fh;
/* Now get the file offset on the dserver
@@ -309,7 +310,7 @@ ssize_t filelayout_read_pagelist(
} else { /* If no layout use MDS */
dprintk("%s: no layout, use MDS\n", __FUNCTION__);
data->pnfs_client = NFS_CLIENT(inode);
- data->session = server->session;
+ data->ds_nfs_client = NULL;
data->args.fh = NFS_FH(inode);
}
diff --git a/fs/nfs/read.c b/fs/nfs/read.c
index d7d8a02..31142df 100644
--- a/fs/nfs/read.c
+++ b/fs/nfs/read.c
@@ -438,6 +438,11 @@ void nfs_read_validate(struct rpc_task *task, void *calldata)
setup_sequence = server->nfs_client->rpc_ops->validate_sequence_args;
+#ifdef CONFIG_PNFS
+ if (data->ds_nfs_client)
+ session = data->ds_nfs_client->cl_ds_session;
+#endif /* CONFIG_PNFS */
+
if (!setup_sequence || !setup_sequence(session,
&data->args.seq_args,
&data->res.seq_res,
diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h
index bccc4bd..04f679c 100644
--- a/include/linux/nfs_xdr.h
+++ b/include/linux/nfs_xdr.h
@@ -1047,7 +1047,7 @@ struct nfs_read_data {
struct rpc_clnt *pnfs_client; /* Holds pNFS device across async calls */
int pnfsflags;
__u64 orig_offset;
- struct nfs4_session *session;
+ struct nfs_client *ds_nfs_client;
#endif /* CONFIG_PNFS */
struct page *page_array[NFS_PAGEVEC_SIZE];
};
--
1.5.3.3
More information about the pNFS
mailing list