[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