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

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
...@@ -6024,7 +6024,7 @@ static int decode_layoutget(struct xdr_stream *xdr, struct rpc_rqst *req, ...@@ -6024,7 +6024,7 @@ static int decode_layoutget(struct xdr_stream *xdr, struct rpc_rqst *req,
status = decode_op_hdr(xdr, OP_LAYOUTGET); status = decode_op_hdr(xdr, OP_LAYOUTGET);
if (status) if (status)
return status; goto out;
p = xdr_inline_decode(xdr, 4); p = xdr_inline_decode(xdr, 4);
if (unlikely(!p)) if (unlikely(!p))
goto out_overflow; goto out_overflow;
...@@ -6037,7 +6037,8 @@ static int decode_layoutget(struct xdr_stream *xdr, struct rpc_rqst *req, ...@@ -6037,7 +6037,8 @@ static int decode_layoutget(struct xdr_stream *xdr, struct rpc_rqst *req,
if (!layout_count) { if (!layout_count) {
dprintk("%s: server responded with empty layout array\n", dprintk("%s: server responded with empty layout array\n",
__func__); __func__);
return -EINVAL; status = -EINVAL;
goto out;
} }
p = xdr_inline_decode(xdr, 28); p = xdr_inline_decode(xdr, 28);
...@@ -6062,7 +6063,8 @@ static int decode_layoutget(struct xdr_stream *xdr, struct rpc_rqst *req, ...@@ -6062,7 +6063,8 @@ static int decode_layoutget(struct xdr_stream *xdr, struct rpc_rqst *req,
dprintk("NFS: server cheating in layoutget reply: " dprintk("NFS: server cheating in layoutget reply: "
"layout len %u > recvd %u\n", "layout len %u > recvd %u\n",
res->layoutp->len, recvd); res->layoutp->len, recvd);
return -EINVAL; status = -EINVAL;
goto out;
} }
if (layout_count > 1) { if (layout_count > 1) {
...@@ -6075,10 +6077,13 @@ static int decode_layoutget(struct xdr_stream *xdr, struct rpc_rqst *req, ...@@ -6075,10 +6077,13 @@ static int decode_layoutget(struct xdr_stream *xdr, struct rpc_rqst *req,
__func__, layout_count); __func__, layout_count);
} }
return 0; out:
res->status = status;
return status;
out_overflow: out_overflow:
print_overflow_msg(__func__, xdr); print_overflow_msg(__func__, xdr);
return -EIO; status = -EIO;
goto out;
} }
static int decode_layoutreturn(struct xdr_stream *xdr, static int decode_layoutreturn(struct xdr_stream *xdr,
......
...@@ -259,6 +259,7 @@ struct nfs4_layoutget_args { ...@@ -259,6 +259,7 @@ struct nfs4_layoutget_args {
struct nfs4_layoutget_res { struct nfs4_layoutget_res {
struct nfs4_sequence_res seq_res; struct nfs4_sequence_res seq_res;
int status;
__u32 return_on_close; __u32 return_on_close;
struct pnfs_layout_range range; struct pnfs_layout_range range;
__u32 type; __u32 type;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment