mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	NFS OFFLOAD_CANCEL xdr
Signed-off-by: Olga Kornievskaia <kolga@netapp.com> Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
This commit is contained in:
		
							parent
							
								
									5178a125f6
								
							
						
					
					
						commit
						cb95deea0b
					
				
					 6 changed files with 84 additions and 0 deletions
				
			
		| 
						 | 
					@ -26,6 +26,9 @@
 | 
				
			||||||
					 NFS42_WRITE_RES_SIZE + \
 | 
										 NFS42_WRITE_RES_SIZE + \
 | 
				
			||||||
					 1 /* cr_consecutive */ + \
 | 
										 1 /* cr_consecutive */ + \
 | 
				
			||||||
					 1 /* cr_synchronous */)
 | 
										 1 /* cr_synchronous */)
 | 
				
			||||||
 | 
					#define encode_offload_cancel_maxsz	(op_encode_hdr_maxsz + \
 | 
				
			||||||
 | 
										 XDR_QUADLEN(NFS4_STATEID_SIZE))
 | 
				
			||||||
 | 
					#define decode_offload_cancel_maxsz	(op_decode_hdr_maxsz)
 | 
				
			||||||
#define encode_deallocate_maxsz		(op_encode_hdr_maxsz + \
 | 
					#define encode_deallocate_maxsz		(op_encode_hdr_maxsz + \
 | 
				
			||||||
					 encode_fallocate_maxsz)
 | 
										 encode_fallocate_maxsz)
 | 
				
			||||||
#define decode_deallocate_maxsz		(op_decode_hdr_maxsz)
 | 
					#define decode_deallocate_maxsz		(op_decode_hdr_maxsz)
 | 
				
			||||||
| 
						 | 
					@ -75,6 +78,12 @@
 | 
				
			||||||
					 decode_putfh_maxsz + \
 | 
										 decode_putfh_maxsz + \
 | 
				
			||||||
					 decode_copy_maxsz + \
 | 
										 decode_copy_maxsz + \
 | 
				
			||||||
					 decode_commit_maxsz)
 | 
										 decode_commit_maxsz)
 | 
				
			||||||
 | 
					#define NFS4_enc_offload_cancel_sz	(compound_encode_hdr_maxsz + \
 | 
				
			||||||
 | 
										 encode_putfh_maxsz + \
 | 
				
			||||||
 | 
										 encode_offload_cancel_maxsz)
 | 
				
			||||||
 | 
					#define NFS4_dec_offload_cancel_sz	(compound_decode_hdr_maxsz + \
 | 
				
			||||||
 | 
										 decode_putfh_maxsz + \
 | 
				
			||||||
 | 
										 decode_offload_cancel_maxsz)
 | 
				
			||||||
#define NFS4_enc_deallocate_sz		(compound_encode_hdr_maxsz + \
 | 
					#define NFS4_enc_deallocate_sz		(compound_encode_hdr_maxsz + \
 | 
				
			||||||
					 encode_putfh_maxsz + \
 | 
										 encode_putfh_maxsz + \
 | 
				
			||||||
					 encode_deallocate_maxsz + \
 | 
										 encode_deallocate_maxsz + \
 | 
				
			||||||
| 
						 | 
					@ -145,6 +154,14 @@ static void encode_copy(struct xdr_stream *xdr,
 | 
				
			||||||
	encode_uint32(xdr, 0); /* src server list */
 | 
						encode_uint32(xdr, 0); /* src server list */
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void encode_offload_cancel(struct xdr_stream *xdr,
 | 
				
			||||||
 | 
									  const struct nfs42_offload_status_args *args,
 | 
				
			||||||
 | 
									  struct compound_hdr *hdr)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						encode_op_hdr(xdr, OP_OFFLOAD_CANCEL, decode_offload_cancel_maxsz, hdr);
 | 
				
			||||||
 | 
						encode_nfs4_stateid(xdr, &args->osa_stateid);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void encode_deallocate(struct xdr_stream *xdr,
 | 
					static void encode_deallocate(struct xdr_stream *xdr,
 | 
				
			||||||
			      const struct nfs42_falloc_args *args,
 | 
								      const struct nfs42_falloc_args *args,
 | 
				
			||||||
			      struct compound_hdr *hdr)
 | 
								      struct compound_hdr *hdr)
 | 
				
			||||||
| 
						 | 
					@ -260,6 +277,25 @@ static void nfs4_xdr_enc_copy(struct rpc_rqst *req,
 | 
				
			||||||
	encode_nops(&hdr);
 | 
						encode_nops(&hdr);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Encode OFFLOAD_CANEL request
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					static void nfs4_xdr_enc_offload_cancel(struct rpc_rqst *req,
 | 
				
			||||||
 | 
										struct xdr_stream *xdr,
 | 
				
			||||||
 | 
										const void *data)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						const struct nfs42_offload_status_args *args = data;
 | 
				
			||||||
 | 
						struct compound_hdr hdr = {
 | 
				
			||||||
 | 
							.minorversion = nfs4_xdr_minorversion(&args->osa_seq_args),
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						encode_compound_hdr(xdr, req, &hdr);
 | 
				
			||||||
 | 
						encode_sequence(xdr, &args->osa_seq_args, &hdr);
 | 
				
			||||||
 | 
						encode_putfh(xdr, args->osa_src_fh, &hdr);
 | 
				
			||||||
 | 
						encode_offload_cancel(xdr, args, &hdr);
 | 
				
			||||||
 | 
						encode_nops(&hdr);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Encode DEALLOCATE request
 | 
					 * Encode DEALLOCATE request
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
| 
						 | 
					@ -413,6 +449,12 @@ static int decode_copy(struct xdr_stream *xdr, struct nfs42_copy_res *res)
 | 
				
			||||||
	return decode_copy_requirements(xdr, res);
 | 
						return decode_copy_requirements(xdr, res);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static int decode_offload_cancel(struct xdr_stream *xdr,
 | 
				
			||||||
 | 
									 struct nfs42_offload_status_res *res)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return decode_op_hdr(xdr, OP_OFFLOAD_CANCEL);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int decode_deallocate(struct xdr_stream *xdr, struct nfs42_falloc_res *res)
 | 
					static int decode_deallocate(struct xdr_stream *xdr, struct nfs42_falloc_res *res)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return decode_op_hdr(xdr, OP_DEALLOCATE);
 | 
						return decode_op_hdr(xdr, OP_DEALLOCATE);
 | 
				
			||||||
| 
						 | 
					@ -512,6 +554,32 @@ static int nfs4_xdr_dec_copy(struct rpc_rqst *rqstp,
 | 
				
			||||||
	return status;
 | 
						return status;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Decode OFFLOAD_CANCEL response
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					static int nfs4_xdr_dec_offload_cancel(struct rpc_rqst *rqstp,
 | 
				
			||||||
 | 
									       struct xdr_stream *xdr,
 | 
				
			||||||
 | 
									       void *data)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct nfs42_offload_status_res *res = data;
 | 
				
			||||||
 | 
						struct compound_hdr hdr;
 | 
				
			||||||
 | 
						int status;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						status = decode_compound_hdr(xdr, &hdr);
 | 
				
			||||||
 | 
						if (status)
 | 
				
			||||||
 | 
							goto out;
 | 
				
			||||||
 | 
						status = decode_sequence(xdr, &res->osr_seq_res, rqstp);
 | 
				
			||||||
 | 
						if (status)
 | 
				
			||||||
 | 
							goto out;
 | 
				
			||||||
 | 
						status = decode_putfh(xdr);
 | 
				
			||||||
 | 
						if (status)
 | 
				
			||||||
 | 
							goto out;
 | 
				
			||||||
 | 
						status = decode_offload_cancel(xdr, res);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					out:
 | 
				
			||||||
 | 
						return status;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Decode DEALLOCATE request
 | 
					 * Decode DEALLOCATE request
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -9620,6 +9620,7 @@ static const struct nfs4_minor_version_ops nfs_v4_2_minor_ops = {
 | 
				
			||||||
		| NFS_CAP_LGOPEN
 | 
							| NFS_CAP_LGOPEN
 | 
				
			||||||
		| NFS_CAP_ALLOCATE
 | 
							| NFS_CAP_ALLOCATE
 | 
				
			||||||
		| NFS_CAP_COPY
 | 
							| NFS_CAP_COPY
 | 
				
			||||||
 | 
							| NFS_CAP_OFFLOAD_CANCEL
 | 
				
			||||||
		| NFS_CAP_DEALLOCATE
 | 
							| NFS_CAP_DEALLOCATE
 | 
				
			||||||
		| NFS_CAP_SEEK
 | 
							| NFS_CAP_SEEK
 | 
				
			||||||
		| NFS_CAP_LAYOUTSTATS
 | 
							| NFS_CAP_LAYOUTSTATS
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7789,6 +7789,7 @@ const struct rpc_procinfo nfs4_procedures[] = {
 | 
				
			||||||
	PROC42(LAYOUTSTATS,	enc_layoutstats,	dec_layoutstats),
 | 
						PROC42(LAYOUTSTATS,	enc_layoutstats,	dec_layoutstats),
 | 
				
			||||||
	PROC42(CLONE,		enc_clone,		dec_clone),
 | 
						PROC42(CLONE,		enc_clone,		dec_clone),
 | 
				
			||||||
	PROC42(COPY,		enc_copy,		dec_copy),
 | 
						PROC42(COPY,		enc_copy,		dec_copy),
 | 
				
			||||||
 | 
						PROC42(OFFLOAD_CANCEL,	enc_offload_cancel,	dec_offload_cancel),
 | 
				
			||||||
	PROC(LOOKUPP,		enc_lookupp,		dec_lookupp),
 | 
						PROC(LOOKUPP,		enc_lookupp,		dec_lookupp),
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -527,6 +527,7 @@ enum {
 | 
				
			||||||
	NFSPROC4_CLNT_LAYOUTSTATS,
 | 
						NFSPROC4_CLNT_LAYOUTSTATS,
 | 
				
			||||||
	NFSPROC4_CLNT_CLONE,
 | 
						NFSPROC4_CLNT_CLONE,
 | 
				
			||||||
	NFSPROC4_CLNT_COPY,
 | 
						NFSPROC4_CLNT_COPY,
 | 
				
			||||||
 | 
						NFSPROC4_CLNT_OFFLOAD_CANCEL,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	NFSPROC4_CLNT_LOOKUPP,
 | 
						NFSPROC4_CLNT_LOOKUPP,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -255,5 +255,6 @@ struct nfs_server {
 | 
				
			||||||
#define NFS_CAP_LAYOUTSTATS	(1U << 22)
 | 
					#define NFS_CAP_LAYOUTSTATS	(1U << 22)
 | 
				
			||||||
#define NFS_CAP_CLONE		(1U << 23)
 | 
					#define NFS_CAP_CLONE		(1U << 23)
 | 
				
			||||||
#define NFS_CAP_COPY		(1U << 24)
 | 
					#define NFS_CAP_COPY		(1U << 24)
 | 
				
			||||||
 | 
					#define NFS_CAP_OFFLOAD_CANCEL	(1U << 25)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1403,6 +1403,18 @@ struct nfs42_copy_res {
 | 
				
			||||||
	struct nfs_commitres		commit_res;
 | 
						struct nfs_commitres		commit_res;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct nfs42_offload_status_args {
 | 
				
			||||||
 | 
						struct nfs4_sequence_args	osa_seq_args;
 | 
				
			||||||
 | 
						struct nfs_fh			*osa_src_fh;
 | 
				
			||||||
 | 
						nfs4_stateid			osa_stateid;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct nfs42_offload_status_res {
 | 
				
			||||||
 | 
						struct nfs4_sequence_res	osr_seq_res;
 | 
				
			||||||
 | 
						uint64_t			osr_count;
 | 
				
			||||||
 | 
						int				osr_status;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct nfs42_seek_args {
 | 
					struct nfs42_seek_args {
 | 
				
			||||||
	struct nfs4_sequence_args	seq_args;
 | 
						struct nfs4_sequence_args	seq_args;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue