[pnfs] [PATCH] cb_layout: send cb_sequence in compound

Benny Halevy bhalevy at panasas.com
Mon Jun 4 04:16:12 EDT 2007


Signed-off-by: Benny Halevy <bhalevy at panasas.com>
---
 fs/nfsd/nfs4callback.c |   49 ++++++++++++++++++++++++++++++++---------------
 1 files changed, 33 insertions(+), 16 deletions(-)

diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c
index 2e8e46e..5a726ce 100644
--- a/fs/nfsd/nfs4callback.c
+++ b/fs/nfsd/nfs4callback.c
@@ -92,12 +92,6 @@ enum nfs_cb_opnum4 {
 					enc_nfs4_fh_sz)
 #define NFS4_dec_cb_recall_sz		(cb_compound_dec_hdr_sz  +      \
 					op_dec_sz)
-#define NFS4_enc_cb_layout_sz		(cb_compound_enc_hdr_sz +       \
-					1 + 3 +                         \
-					enc_nfs4_fh_sz + 4)
-
-#define NFS4_dec_cb_layout_sz		(cb_compound_dec_hdr_sz  +      \
-					op_dec_sz)
 
 #if defined(CONFIG_NFSD_V4_1)
 #define NFS41_enc_cb_null_sz		0
@@ -115,6 +109,13 @@ enum nfs_cb_opnum4 {
 #define NFS41_dec_cb_recall_sz		(cb_compound_dec_hdr_sz  +      \
 					cb_sequence41_dec_sz +          \
 					op_dec_sz)
+#define NFS41_enc_cb_layout_sz		(cb_compound_enc_hdr_sz +       \
+					cb_sequence41_enc_sz +          \
+					1 + 3 +                         \
+					enc_nfs4_fh_sz + 4)
+#define NFS41_dec_cb_layout_sz		(cb_compound_dec_hdr_sz  +      \
+					cb_sequence41_dec_sz +          \
+					op_dec_sz)
 
 struct nfs41_rpc_args {
 	struct nfs4_callback     *args_callback;
@@ -405,18 +406,19 @@ nfs41_xdr_enc_cb_recall(struct rpc_rqst *req, u32 *p,
 
 #ifdef CONFIG_PNFS
 static int
-nfs4_xdr_enc_cb_layout(struct rpc_rqst *req, u32 *p, struct nfs4_layoutrecall *args)
+nfs41_xdr_enc_cb_layout(struct rpc_rqst *req, u32 *p,
+                        struct nfs41_rpc_args *rpc_args)
 {
 	struct xdr_stream xdr;
-
+	struct nfs4_layoutrecall *args = rpc_args->args_op;
 	struct nfs4_cb_compound_hdr hdr = {
 		.ident = 0,
 		.nops   = 1,
 	};
 
 	xdr_init_encode(&xdr, &req->rq_snd_buf, p);
-	encode_cb_compound_hdr(&xdr, &hdr);
-
+	encode_cb_compound41_hdr(&xdr, &hdr);
+	encode_cb_sequence(&xdr, rpc_args->args_seq);
 	return (encode_cb_layout(&xdr, args));
 }
 #endif /* CONFIG_PNFS */
@@ -516,7 +518,8 @@ out:
 
 #ifdef CONFIG_PNFS
 static int
-nfs4_xdr_dec_cb_layout(struct rpc_rqst *rqstp, u32 *p)
+nfs41_xdr_dec_cb_layout(struct rpc_rqst *rqstp, u32 *p,
+                        struct nfs41_rpc_res *rpc_res)
 {
 	struct xdr_stream xdr;
 	struct nfs4_cb_compound_hdr hdr;
@@ -526,6 +529,9 @@ nfs4_xdr_dec_cb_layout(struct rpc_rqst *rqstp, u32 *p)
 	status = decode_cb_compound_hdr(&xdr, &hdr);
 	if (status)
 		goto out;
+	status = decode_cb_sequence(&xdr, rpc_res->res_seq);
+	if (status)
+		goto out;
 	status = decode_cb_op_hdr(&xdr, OP_CB_LAYOUT);
 out:
 	return status;
@@ -553,9 +559,6 @@ out:
 static struct rpc_procinfo     nfs4_cb_procedures[] = {
     PROC(CB_NULL,      NULL,     enc_cb_null,     dec_cb_null),
     PROC(CB_RECALL,    COMPOUND,   enc_cb_recall,      dec_cb_recall),
-#ifdef CONFIG_PNFS
-    PROC(CB_LAYOUT,    COMPOUND,   enc_cb_layout,      dec_cb_layout),
-#endif
 };
 
 static struct rpc_version       nfs_cb_version4 = {
@@ -578,6 +581,9 @@ static struct rpc_version       nfs_cb_version4 = {
 static struct rpc_procinfo     nfs41_cb_procedures[] = {
     PROC(CB_NULL,      NULL,     enc_cb_null,     dec_cb_null),
     PROC41(CB_RECALL,    COMPOUND,   enc_cb_recall,      dec_cb_recall),
+#ifdef CONFIG_PNFS
+    PROC41(CB_LAYOUT,    COMPOUND,   enc_cb_layout,      dec_cb_layout),
+#endif
 };
 
 static struct rpc_version       nfs_cb_version41 = {
@@ -975,9 +981,18 @@ nfsd4_cb_layout(struct nfs4_layoutrecall *clr)
 {
 	struct nfs4_client *clp = clr->clr_client;
 	struct rpc_clnt *clnt = NULL;
+	struct nfs41_cb_sequence seq;
+	struct nfs41_rpc_args args = {
+		.args_op = clr,
+		.args_seq = &seq
+	};
+	struct nfs41_rpc_res res = {
+		.res_seq = &seq
+	};
 	struct rpc_message msg = {
-		.rpc_proc = &nfs4_cb_procedures[NFSPROC4_CLNT_CB_LAYOUT],
-		.rpc_argp = clr,
+		.rpc_proc = &nfs41_cb_procedures[NFSPROC4_CLNT_CB_LAYOUT],
+		.rpc_argp = &args,
+		.rpc_resp = &res
 	};
 
 	if (clp)
@@ -993,7 +1008,9 @@ nfsd4_cb_layout(struct nfs4_layoutrecall *clr)
 		goto out;
 	}
 
+	nfs41_cb_sequence_setup(clp, &seq);
 	clr->clr_status = rpc_call_sync(clnt, &msg, RPC_TASK_SOFT);
+	nfs41_cb_sequence_done(clp, &seq);
 
 	put_rpccred(msg.rpc_cred);
 
-- 
1.5.2.86.g99b5



More information about the pNFS mailing list