Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

NFS OFFLOAD_CANCEL xdr

Signed-off-by: Olga Kornievskaia <kolga@netapp.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>

authored by

Olga Kornievskaia and committed by
Anna Schumaker
cb95deea 5178a125

+84
+68
fs/nfs/nfs42xdr.c
··· 26 26 NFS42_WRITE_RES_SIZE + \ 27 27 1 /* cr_consecutive */ + \ 28 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 32 #define encode_deallocate_maxsz (op_encode_hdr_maxsz + \ 30 33 encode_fallocate_maxsz) 31 34 #define decode_deallocate_maxsz (op_decode_hdr_maxsz) ··· 78 75 decode_putfh_maxsz + \ 79 76 decode_copy_maxsz + \ 80 77 decode_commit_maxsz) 78 + #define NFS4_enc_offload_cancel_sz (compound_encode_hdr_maxsz + \ 79 + encode_putfh_maxsz + \ 80 + encode_offload_cancel_maxsz) 81 + #define NFS4_dec_offload_cancel_sz (compound_decode_hdr_maxsz + \ 82 + decode_putfh_maxsz + \ 83 + decode_offload_cancel_maxsz) 81 84 #define NFS4_enc_deallocate_sz (compound_encode_hdr_maxsz + \ 82 85 encode_putfh_maxsz + \ 83 86 encode_deallocate_maxsz + \ ··· 152 143 encode_uint32(xdr, 1); /* consecutive = true */ 153 144 encode_uint32(xdr, 1); /* synchronous = true */ 154 145 encode_uint32(xdr, 0); /* src server list */ 146 + } 147 + 148 + static void encode_offload_cancel(struct xdr_stream *xdr, 149 + const struct nfs42_offload_status_args *args, 150 + struct compound_hdr *hdr) 151 + { 152 + encode_op_hdr(xdr, OP_OFFLOAD_CANCEL, decode_offload_cancel_maxsz, hdr); 153 + encode_nfs4_stateid(xdr, &args->osa_stateid); 155 154 } 156 155 157 156 static void encode_deallocate(struct xdr_stream *xdr, ··· 274 257 encode_putfh(xdr, args->dst_fh, &hdr); 275 258 encode_copy(xdr, args, &hdr); 276 259 encode_copy_commit(xdr, args, &hdr); 260 + encode_nops(&hdr); 261 + } 262 + 263 + /* 264 + * Encode OFFLOAD_CANEL request 265 + */ 266 + static void nfs4_xdr_enc_offload_cancel(struct rpc_rqst *req, 267 + struct xdr_stream *xdr, 268 + const void *data) 269 + { 270 + const struct nfs42_offload_status_args *args = data; 271 + struct compound_hdr hdr = { 272 + .minorversion = nfs4_xdr_minorversion(&args->osa_seq_args), 273 + }; 274 + 275 + encode_compound_hdr(xdr, req, &hdr); 276 + encode_sequence(xdr, &args->osa_seq_args, &hdr); 277 + encode_putfh(xdr, args->osa_src_fh, &hdr); 278 + encode_offload_cancel(xdr, args, &hdr); 277 279 encode_nops(&hdr); 278 280 } 279 281 ··· 449 413 return decode_copy_requirements(xdr, res); 450 414 } 451 415 416 + static int decode_offload_cancel(struct xdr_stream *xdr, 417 + struct nfs42_offload_status_res *res) 418 + { 419 + return decode_op_hdr(xdr, OP_OFFLOAD_CANCEL); 420 + } 421 + 452 422 static int decode_deallocate(struct xdr_stream *xdr, struct nfs42_falloc_res *res) 453 423 { 454 424 return decode_op_hdr(xdr, OP_DEALLOCATE); ··· 550 508 if (status) 551 509 goto out; 552 510 status = decode_commit(xdr, &res->commit_res); 511 + out: 512 + return status; 513 + } 514 + 515 + /* 516 + * Decode OFFLOAD_CANCEL response 517 + */ 518 + static int nfs4_xdr_dec_offload_cancel(struct rpc_rqst *rqstp, 519 + struct xdr_stream *xdr, 520 + void *data) 521 + { 522 + struct nfs42_offload_status_res *res = data; 523 + struct compound_hdr hdr; 524 + int status; 525 + 526 + status = decode_compound_hdr(xdr, &hdr); 527 + if (status) 528 + goto out; 529 + status = decode_sequence(xdr, &res->osr_seq_res, rqstp); 530 + if (status) 531 + goto out; 532 + status = decode_putfh(xdr); 533 + if (status) 534 + goto out; 535 + status = decode_offload_cancel(xdr, res); 536 + 553 537 out: 554 538 return status; 555 539 }
+1
fs/nfs/nfs4proc.c
··· 9620 9620 | NFS_CAP_LGOPEN 9621 9621 | NFS_CAP_ALLOCATE 9622 9622 | NFS_CAP_COPY 9623 + | NFS_CAP_OFFLOAD_CANCEL 9623 9624 | NFS_CAP_DEALLOCATE 9624 9625 | NFS_CAP_SEEK 9625 9626 | NFS_CAP_LAYOUTSTATS
+1
fs/nfs/nfs4xdr.c
··· 7789 7789 PROC42(LAYOUTSTATS, enc_layoutstats, dec_layoutstats), 7790 7790 PROC42(CLONE, enc_clone, dec_clone), 7791 7791 PROC42(COPY, enc_copy, dec_copy), 7792 + PROC42(OFFLOAD_CANCEL, enc_offload_cancel, dec_offload_cancel), 7792 7793 PROC(LOOKUPP, enc_lookupp, dec_lookupp), 7793 7794 }; 7794 7795
+1
include/linux/nfs4.h
··· 527 527 NFSPROC4_CLNT_LAYOUTSTATS, 528 528 NFSPROC4_CLNT_CLONE, 529 529 NFSPROC4_CLNT_COPY, 530 + NFSPROC4_CLNT_OFFLOAD_CANCEL, 530 531 531 532 NFSPROC4_CLNT_LOOKUPP, 532 533 };
+1
include/linux/nfs_fs_sb.h
··· 255 255 #define NFS_CAP_LAYOUTSTATS (1U << 22) 256 256 #define NFS_CAP_CLONE (1U << 23) 257 257 #define NFS_CAP_COPY (1U << 24) 258 + #define NFS_CAP_OFFLOAD_CANCEL (1U << 25) 258 259 259 260 #endif
+12
include/linux/nfs_xdr.h
··· 1403 1403 struct nfs_commitres commit_res; 1404 1404 }; 1405 1405 1406 + struct nfs42_offload_status_args { 1407 + struct nfs4_sequence_args osa_seq_args; 1408 + struct nfs_fh *osa_src_fh; 1409 + nfs4_stateid osa_stateid; 1410 + }; 1411 + 1412 + struct nfs42_offload_status_res { 1413 + struct nfs4_sequence_res osr_seq_res; 1414 + uint64_t osr_count; 1415 + int osr_status; 1416 + }; 1417 + 1406 1418 struct nfs42_seek_args { 1407 1419 struct nfs4_sequence_args seq_args; 1408 1420