diff options
Diffstat (limited to 'fs/nfs/nfs42xdr.c')
-rw-r--r-- | fs/nfs/nfs42xdr.c | 68 |
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 | ||
157 | static 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 | |||
148 | static void encode_deallocate(struct xdr_stream *xdr, | 165 | static 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 | */ | ||
283 | static 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 | */ |
266 | static void nfs4_xdr_enc_deallocate(struct rpc_rqst *req, | 302 | static 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 | ||
452 | static 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 | |||
416 | static int decode_deallocate(struct xdr_stream *xdr, struct nfs42_falloc_res *res) | 458 | static 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 | */ | ||
560 | static 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 | |||
579 | out: | ||
580 | return status; | ||
581 | } | ||
582 | |||
583 | /* | ||
516 | * Decode DEALLOCATE request | 584 | * Decode DEALLOCATE request |
517 | */ | 585 | */ |
518 | static int nfs4_xdr_dec_deallocate(struct rpc_rqst *rqstp, | 586 | static int nfs4_xdr_dec_deallocate(struct rpc_rqst *rqstp, |