Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

NFS COPY xdr handle async reply



If server returns async reply, it must include a callback stateid,
wr_callback_id in the write_response4.

Signed-off-by: default avatarOlga Kornievskaia <kolga@netapp.com>
Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
parent cb95deea
Loading
Loading
Loading
Loading
+12 −10
Original line number Diff line number Diff line
@@ -389,21 +389,23 @@ static int decode_write_response(struct xdr_stream *xdr,
				 struct nfs42_write_res *res)
{
	__be32 *p;
	int status, count;

	p = xdr_inline_decode(xdr, 4 + 8 + 4);
	p = xdr_inline_decode(xdr, 4);
	if (unlikely(!p))
		goto out_overflow;

	/*
	 * We never use asynchronous mode, so warn if a server returns
	 * a stateid.
	 */
	if (unlikely(*p != 0)) {
		pr_err_once("%s: server has set unrequested "
				"asynchronous mode\n", __func__);
	count = be32_to_cpup(p);
	if (count > 1)
		return -EREMOTEIO;
	else if (count == 1) {
		status = decode_opaque_fixed(xdr, &res->stateid,
				NFS4_STATEID_SIZE);
		if (unlikely(status))
			goto out_overflow;
	}
	p++;
	p = xdr_inline_decode(xdr, 8 + 4);
	if (unlikely(!p))
		goto out_overflow;
	p = xdr_decode_hyper(p, &res->count);
	res->verifier.committed = be32_to_cpup(p);
	return decode_verifier(xdr, &res->verifier.verifier);
+1 −0
Original line number Diff line number Diff line
@@ -1391,6 +1391,7 @@ struct nfs42_copy_args {
};

struct nfs42_write_res {
	nfs4_stateid		stateid;
	u64			count;
	struct nfs_writeverf	verifier;
};