[pnfs] [PATCH 03/20] 2.6-latest pnfs client nfs41_validate_seq_args change
andros at umich.edu
andros at umich.edu
Wed Nov 28 16:33:04 EST 2007
From: Andy Adamson <andros at umich.edu>
Replace struct nfs_server with struct nfs4_session so that
data server sessions can be used.
The 2.6.24 sessions port moved the sessions bookeeping from the 2.6.18.3
include/linux/nfs4_fs.h: struct nfs_client to include/linux/nfs_fs_sb.h:
struct nfs_server. This makes sense for a the 2.6.24 non-pNFS NFSv4.1
sessions where the struct nfs_client holds the nfsv4.0 open, lock, and
delegation state and the struct nfs_server holds the connection information
for a mount point.
It does not make sense for the pNFS filelayout data servers which are not
mounted, and use the MDS struct nfs_server for all bookkeeping.
The filelayout data servers use struct nfs_client to reference the
struct nfs4_session.
The 2.6.18.3 sessions code placed two new calls in each rpc for NFSv4.1
rpc_ops->setup_sequence and rpc_ops->sequence_done.
The 2.6.24 sessions code does this in much cleaner way: using the rpc layer
rpc_call_ops rpc_call_prepare, and rpc_call_done.
This patch re factors the nfs4_server inteface to the rpc_call_ops:rpc_call_prepare function nfs41_validate_seq_args() to use struct nfs4_sessions so that
the filelayout data server struct nfs_client->cl_ds_session and the
non-pnfs (or MDS) struct nfs_server->session can both be serviced.
This new interface will be use in subsequent patches that implement the
filelayout I/O
Signed-off by: Andy Adamson<andros at umich.edu>
---
fs/nfs/nfs4filelayout.c | 2 ++
fs/nfs/nfs4proc.c | 8 ++++----
fs/nfs/read.c | 14 ++++++++++----
fs/nfs/unlink.c | 4 ++--
fs/nfs/write.c | 5 +++--
include/linux/nfs_xdr.h | 2 +-
6 files changed, 22 insertions(+), 13 deletions(-)
diff --git a/fs/nfs/nfs4filelayout.c b/fs/nfs/nfs4filelayout.c
index 69f839d..c3db428 100644
--- a/fs/nfs/nfs4filelayout.c
+++ b/fs/nfs/nfs4filelayout.c
@@ -71,6 +71,8 @@ extern struct nfs_write_data *nfs_commit_alloc(void);
extern void nfs_commit_free(struct nfs_write_data *p);
extern void nfs_initiate_write(struct nfs_write_data *, struct rpc_clnt *, const struct rpc_call_ops *, int);
extern void nfs_initiate_read(struct nfs_read_data *data, struct rpc_clnt *clnt, const struct rpc_call_ops *call_ops);
+extern void nfs_read_validate(struct rpc_task *task, void *calldata);
+extern void nfs_readdata_release(void *data);
/* Callback operations to the pNFS client */
struct pnfs_client_operations * pnfs_callback_ops;
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index eb73b3e..0185cae 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -381,14 +381,14 @@ static int nfs41_setup_sequence(struct nfs4_session *session,
return 0;
}
-static int nfs41_validate_seq_args(struct nfs_server *server,
- void *args,
+static int nfs41_validate_seq_args(struct nfs4_session *session,
+ void *args,
void *res,
int cache_this,
struct rpc_task *task)
{
- return nfs41_setup_sequence(server->session,
- args, res,
+ return nfs41_setup_sequence(session,
+ args, res,
cache_this, task);
}
diff --git a/fs/nfs/read.c b/fs/nfs/read.c
index c4ce40b..dd98eca 100644
--- a/fs/nfs/read.c
+++ b/fs/nfs/read.c
@@ -247,7 +247,6 @@ void nfs_initiate_read(struct nfs_read_data *data, struct rpc_clnt *clnt,
nfs_execute_read(data);
}
-EXPORT_SYMBOL(nfs_initiate_read);
/*
* Generate multiple requests to fill a single page.
@@ -428,15 +427,16 @@ void nfs_read_validate(struct rpc_task *task, void *calldata)
{
struct nfs_read_data *data = calldata;
struct nfs_server *server = data->args.server;
- int (*setup_sequence)(struct nfs_server *,
+ struct nfs4_session *session = server->session;
+ int (*setup_sequence)(struct nfs4_session *,
void *, void *, int, struct rpc_task *);
setup_sequence = server->nfs_client->rpc_ops->validate_sequence_args;
- if (!setup_sequence || !setup_sequence(server,
+ if (!setup_sequence || !setup_sequence(session,
&data->args.seq_args,
&data->res.seq_res,
- 0, task))
+ 0, task))
rpc_start_call(task);
}
#endif
@@ -672,3 +672,9 @@ void nfs_destroy_readpagecache(void)
mempool_destroy(nfs_rdata_mempool);
kmem_cache_destroy(nfs_rdata_cachep);
}
+
+#ifdef CONFIG_PNFS
+EXPORT_SYMBOL(nfs_initiate_read);
+EXPORT_SYMBOL(nfs_readdata_release);
+EXPORT_SYMBOL(nfs_read_validate);
+#endif /* CONFIG_PNFS */
diff --git a/fs/nfs/unlink.c b/fs/nfs/unlink.c
index cf02321..22b0147 100644
--- a/fs/nfs/unlink.c
+++ b/fs/nfs/unlink.c
@@ -121,12 +121,12 @@ void nfs_unlink_validate(struct rpc_task *task, void *calldata)
{
struct nfs_unlinkdata *data = calldata;
struct nfs_server *server = NFS_SERVER(data->dir);
- int (*setup_sequence)(struct nfs_server *,
+ int (*setup_sequence)(struct nfs4_session *,
void *, void *, int, struct rpc_task *);
setup_sequence = NFS_PROTO(data->dir)->validate_sequence_args;
- if (!setup_sequence || !setup_sequence(server,
+ if (!setup_sequence || !setup_sequence(server->session,
&data->args.seq_args,
&data->res.seq_res,
1, task))
diff --git a/fs/nfs/write.c b/fs/nfs/write.c
index e3aad7d..cff0a65 100644
--- a/fs/nfs/write.c
+++ b/fs/nfs/write.c
@@ -1043,12 +1043,13 @@ void nfs_write_validate(struct rpc_task *task, void *calldata)
{
struct nfs_write_data *data = calldata;
struct nfs_server *server = NFS_SERVER(data->inode);
- int (*setup_sequence)(struct nfs_server *,
+ struct nfs4_session *session = server->session;
+ int (*setup_sequence)(struct nfs4_session *,
void *, void *, int, struct rpc_task *);
setup_sequence = NFS_PROTO(data->inode)->validate_sequence_args;
- if (!setup_sequence || !setup_sequence(server,
+ if (!setup_sequence || !setup_sequence(session,
&data->args.seq_args,
&data->res.seq_res,
1, task))
diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h
index b500710..c7970a5 100644
--- a/include/linux/nfs_xdr.h
+++ b/include/linux/nfs_xdr.h
@@ -1162,7 +1162,7 @@ struct nfs_rpc_ops {
int (*file_release) (struct inode *, struct file *);
int (*lock)(struct file *, int, struct file_lock *);
void (*clear_acl_cache)(struct inode *);
- int (*validate_sequence_args)(struct nfs_server *,
+ int (*validate_sequence_args)(struct nfs4_session *,
void *args,
void *res,
int,
--
1.5.0.2
More information about the pNFS
mailing list