Commit 808ba32a authored by Fred Isaman's avatar Fred Isaman Committed by Trond Myklebust
Browse files

pnfs: Store return value of decode_layoutget for later processing



This will be needed to seperate return value of OPEN and LAYOUTGET
when they are combined into a single RPC.

Signed-off-by: default avatarFred Isaman <fred.isaman@gmail.com>
Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
parent 34ec9aac
Loading
Loading
Loading
Loading
+10 −5
Original line number Diff line number Diff line
@@ -6024,7 +6024,7 @@ static int decode_layoutget(struct xdr_stream *xdr, struct rpc_rqst *req,

	status = decode_op_hdr(xdr, OP_LAYOUTGET);
	if (status)
		return status;
		goto out;
	p = xdr_inline_decode(xdr, 4);
	if (unlikely(!p))
		goto out_overflow;
@@ -6037,7 +6037,8 @@ static int decode_layoutget(struct xdr_stream *xdr, struct rpc_rqst *req,
	if (!layout_count) {
		dprintk("%s: server responded with empty layout array\n",
			__func__);
		return -EINVAL;
		status = -EINVAL;
		goto out;
	}

	p = xdr_inline_decode(xdr, 28);
@@ -6062,7 +6063,8 @@ static int decode_layoutget(struct xdr_stream *xdr, struct rpc_rqst *req,
		dprintk("NFS: server cheating in layoutget reply: "
				"layout len %u > recvd %u\n",
				res->layoutp->len, recvd);
		return -EINVAL;
		status = -EINVAL;
		goto out;
	}

	if (layout_count > 1) {
@@ -6075,10 +6077,13 @@ static int decode_layoutget(struct xdr_stream *xdr, struct rpc_rqst *req,
			__func__, layout_count);
	}

	return 0;
out:
	res->status = status;
	return status;
out_overflow:
	print_overflow_msg(__func__, xdr);
	return -EIO;
	status = -EIO;
	goto out;
}

static int decode_layoutreturn(struct xdr_stream *xdr,
+1 −0
Original line number Diff line number Diff line
@@ -259,6 +259,7 @@ struct nfs4_layoutget_args {

struct nfs4_layoutget_res {
	struct nfs4_sequence_res seq_res;
	int status;
	__u32 return_on_close;
	struct pnfs_layout_range range;
	__u32 type;