[pnfs] [PATCH 2/9] layoutrecall: introduce pnfs_return_layout_rpc
Benny Halevy
bhalevy at panasas.com
Thu Aug 30 09:30:44 EDT 2007
pnfs_return_layout_rpc encapsulates the layoutreturn rpc call
to be used by pnfs_return_layout and, later on, recall_layout_thread
for the final return terminating a recall sequence for RECALL_{FSID,ALL}
Signed-off-by: Benny Halevy <bhalevy at panasas.com>
---
fs/nfs/pnfs.c | 33 +++++++++++++++++++++++++++++++++
fs/nfs/pnfs.h | 1 +
2 files changed, 34 insertions(+), 0 deletions(-)
diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
index e1fcdbf..1b12839 100644
--- a/fs/nfs/pnfs.c
+++ b/fs/nfs/pnfs.c
@@ -404,6 +404,39 @@ out:
return status;
}
+int
+pnfs_return_layout_rpc(struct nfs_server *server,
+ struct nfs4_pnfs_layoutreturn_arg *argp)
+{
+ int status;
+ struct nfs4_pnfs_layoutreturn_res res;
+ struct nfs41_sequence_args seqarg;
+ struct nfs41_sequence_res seqres;
+ struct nfs4_pnfs_layoutreturn gdata = {
+ .args = argp,
+ .res = &res,
+ };
+ dprintk("%s:Begin\n", __FUNCTION__);
+
+ argp->minorversion_info = &seqarg;
+ res.minorversion_info = &seqres;
+
+ if ((status = server->rpc_ops->setup_sequence(server->nfs4_state->cl_session,
+ argp->minorversion_info,
+ res.minorversion_info)))
+ goto out;
+
+ /* Return layout to server */
+ status = server->rpc_ops->pnfs_layoutreturn(&gdata);
+
+ server->rpc_ops->sequence_done(server->nfs4_state->cl_session,
+ res.minorversion_info, status);
+
+out:
+ dprintk("%s:Exit status %d\n", __FUNCTION__, status);
+ return status;
+}
+
/* DH: Inject layout blob into the I/O module. This must happen before
* the I/O module has its read/write methods called.
*/
diff --git a/fs/nfs/pnfs.h b/fs/nfs/pnfs.h
index 71315cb..f9d2ef6 100644
--- a/fs/nfs/pnfs.h
+++ b/fs/nfs/pnfs.h
@@ -17,6 +17,7 @@ int virtual_update_layout(struct inode* ino, struct nfs_open_context* ctx,
size_t count, loff_t pos, enum pnfs_iomode access_type);
int pnfs_return_layout(struct inode* ino, struct nfs4_pnfs_layout_segment *range);
+int pnfs_return_layout_rpc(struct nfs_server *server, struct nfs4_pnfs_layoutreturn_arg *argp);
void set_pnfs_layoutdriver(struct super_block *sb, u32 id);
void unmount_pnfs_layoutdriver(struct super_block *sb);
ssize_t pnfs_file_write(struct file* filp, const char __user *buf, size_t count, loff_t* pos);
--
1.5.2.5
More information about the pNFS
mailing list