[pnfs] [PATCH 12/23] 2.6-latest pnfs client data server read validate and release
andros at umich.edu
andros at umich.edu
Thu Dec 13 15:51:38 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>
---
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 93ba961..8bbcb1c 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("%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;
}
@@ -297,7 +298,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
@@ -311,7 +312,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 10b9b7e..4a4d1ed 100644
--- a/fs/nfs/read.c
+++ b/fs/nfs/read.c
@@ -437,6 +437,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 c7970a5..84c87dc 100644
--- a/include/linux/nfs_xdr.h
+++ b/include/linux/nfs_xdr.h
@@ -1060,7 +1060,7 @@ struct nfs_read_data {
int pnfsflags;
__u64 orig_offset;
int how; /* for FLUSH_STABLE */
- struct nfs4_session * session; /* XXX Do await w/o it? */
+ struct nfs_client * ds_nfs_client; /* XXX Do await w/o it? */
#endif
struct page *page_array[NFS_PAGEVEC_SIZE];
};
--
1.5.0.2
More information about the pNFS
mailing list