[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