Commit cb95deea authored by Olga Kornievskaia's avatar Olga Kornievskaia Committed by Anna Schumaker
Browse files

NFS OFFLOAD_CANCEL xdr

parent 5178a125
Loading
Loading
Loading
Loading
+68 −0
Original line number Original line Diff line number Diff line
@@ -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 @@ out:
	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
 */
 */
+1 −0
Original line number Original line Diff line number Diff line
@@ -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
+1 −0
Original line number Original line Diff line number Diff line
@@ -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),
};
};


+1 −0
Original line number Original line Diff line number Diff line
@@ -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,
};
};
+1 −0
Original line number Original line Diff line number Diff line
@@ -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
Loading