summaryrefslogtreecommitdiffstats
path: root/fs/nfs/nfs42xdr.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/nfs/nfs42xdr.c')
-rw-r--r--fs/nfs/nfs42xdr.c68
1 files changed, 68 insertions, 0 deletions
diff --git a/fs/nfs/nfs42xdr.c b/fs/nfs/nfs42xdr.c
index 5966e1e7b1f5..09a540d035b8 100644
--- a/fs/nfs/nfs42xdr.c
+++ b/fs/nfs/nfs42xdr.c
@@ -26,6 +26,9 @@
26 NFS42_WRITE_RES_SIZE + \ 26 NFS42_WRITE_RES_SIZE + \
27 1 /* cr_consecutive */ + \ 27 1 /* cr_consecutive */ + \
28 1 /* cr_synchronous */) 28 1 /* cr_synchronous */)
29#define encode_offload_cancel_maxsz (op_encode_hdr_maxsz + \
30 XDR_QUADLEN(NFS4_STATEID_SIZE))
31#define decode_offload_cancel_maxsz (op_decode_hdr_maxsz)
29#define encode_deallocate_maxsz (op_encode_hdr_maxsz + \ 32#define encode_deallocate_maxsz (op_encode_hdr_maxsz + \
30 encode_fallocate_maxsz) 33 encode_fallocate_maxsz)
31#define decode_deallocate_maxsz (op_decode_hdr_maxsz) 34#define decode_deallocate_maxsz (op_decode_hdr_maxsz)
@@ -75,6 +78,12 @@
75 decode_putfh_maxsz + \ 78 decode_putfh_maxsz + \
76 decode_copy_maxsz + \ 79 decode_copy_maxsz + \
77 decode_commit_maxsz) 80 decode_commit_maxsz)
81#define NFS4_enc_offload_cancel_sz (compound_encode_hdr_maxsz + \
82 encode_putfh_maxsz + \
83 encode_offload_cancel_maxsz)
84#define NFS4_dec_offload_cancel_sz (compound_decode_hdr_maxsz + \
85 decode_putfh_maxsz + \
86 decode_offload_cancel_maxsz)
78#define NFS4_enc_deallocate_sz (compound_encode_hdr_maxsz + \ 87#define NFS4_enc_deallocate_sz (compound_encode_hdr_maxsz + \
79 encode_putfh_maxsz + \ 88 encode_putfh_maxsz + \
80 encode_deallocate_maxsz + \ 89 encode_deallocate_maxsz + \
@@ -145,6 +154,14 @@ static void encode_copy(struct xdr_stream *xdr,
145 encode_uint32(xdr, 0); /* src server list */ 154 encode_uint32(xdr, 0); /* src server list */
146} 155}
147 156
157static void encode_offload_cancel(struct xdr_stream *xdr,
158 const struct nfs42_offload_status_args *args,
159 struct compound_hdr *hdr)
160{
161 encode_op_hdr(xdr, OP_OFFLOAD_CANCEL, decode_offload_cancel_maxsz, hdr);
162 encode_nfs4_stateid(xdr, &args->osa_stateid);
163}
164
148static void encode_deallocate(struct xdr_stream *xdr, 165static void encode_deallocate(struct xdr_stream *xdr,
149 const struct nfs42_falloc_args *args, 166 const struct nfs42_falloc_args *args,
150 struct compound_hdr *hdr) 167 struct compound_hdr *hdr)
@@ -261,6 +278,25 @@ static void nfs4_xdr_enc_copy(struct rpc_rqst *req,
261} 278}
262 279
263/* 280/*
281 * Encode OFFLOAD_CANEL request
282 */
283static void nfs4_xdr_enc_offload_cancel(struct rpc_rqst *req,
284 struct xdr_stream *xdr,
285 const void *data)
286{
287 const struct nfs42_offload_status_args *args = data;
288 struct compound_hdr hdr = {
289 .minorversion = nfs4_xdr_minorversion(&args->osa_seq_args),
290 };
291
292 encode_compound_hdr(xdr, req, &hdr);
293 encode_sequence(xdr, &args->osa_seq_args, &hdr);
294 encode_putfh(xdr, args->osa_src_fh, &hdr);
295 encode_offload_cancel(xdr, args, &hdr);
296 encode_nops(&hdr);
297}
298
299/*
264 * Encode DEALLOCATE request 300 * Encode DEALLOCATE request
265 */ 301 */
266static void nfs4_xdr_enc_deallocate(struct rpc_rqst *req, 302static void nfs4_xdr_enc_deallocate(struct rpc_rqst *req,
@@ -413,6 +449,12 @@ static int decode_copy(struct xdr_stream *xdr, struct nfs42_copy_res *res)
413 return decode_copy_requirements(xdr, res); 449 return decode_copy_requirements(xdr, res);
414} 450}
415 451
452static int decode_offload_cancel(struct xdr_stream *xdr,
453 struct nfs42_offload_status_res *res)
454{
455 return decode_op_hdr(xdr, OP_OFFLOAD_CANCEL);
456}
457
416static int decode_deallocate(struct xdr_stream *xdr, struct nfs42_falloc_res *res) 458static int decode_deallocate(struct xdr_stream *xdr, struct nfs42_falloc_res *res)
417{ 459{
418 return decode_op_hdr(xdr, OP_DEALLOCATE); 460 return decode_op_hdr(xdr, OP_DEALLOCATE);
@@ -513,6 +555,32 @@ out:
513} 555}
514 556
515/* 557/*
558 * Decode OFFLOAD_CANCEL response
559 */
560static int nfs4_xdr_dec_offload_cancel(struct rpc_rqst *rqstp,
561 struct xdr_stream *xdr,
562 void *data)
563{
564 struct nfs42_offload_status_res *res = data;
565 struct compound_hdr hdr;
566 int status;
567
568 status = decode_compound_hdr(xdr, &hdr);
569 if (status)
570 goto out;
571 status = decode_sequence(xdr, &res->osr_seq_res, rqstp);
572 if (status)
573 goto out;
574 status = decode_putfh(xdr);
575 if (status)
576 goto out;
577 status = decode_offload_cancel(xdr, res);
578
579out:
580 return status;
581}
582
583/*
516 * Decode DEALLOCATE request 584 * Decode DEALLOCATE request
517 */ 585 */
518static int nfs4_xdr_dec_deallocate(struct rpc_rqst *rqstp, 586static int nfs4_xdr_dec_deallocate(struct rpc_rqst *rqstp,