diff options
Diffstat (limited to 'fs/nfs/nfs2xdr.c')
| -rw-r--r-- | fs/nfs/nfs2xdr.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/fs/nfs/nfs2xdr.c b/fs/nfs/nfs2xdr.c index 5f61b83f4a1c..b4e03ed8599d 100644 --- a/fs/nfs/nfs2xdr.c +++ b/fs/nfs/nfs2xdr.c | |||
| @@ -481,7 +481,8 @@ out_overflow: | |||
| 481 | * void; | 481 | * void; |
| 482 | * }; | 482 | * }; |
| 483 | */ | 483 | */ |
| 484 | static int decode_attrstat(struct xdr_stream *xdr, struct nfs_fattr *result) | 484 | static int decode_attrstat(struct xdr_stream *xdr, struct nfs_fattr *result, |
| 485 | __u32 *op_status) | ||
| 485 | { | 486 | { |
| 486 | enum nfs_stat status; | 487 | enum nfs_stat status; |
| 487 | int error; | 488 | int error; |
| @@ -489,6 +490,8 @@ static int decode_attrstat(struct xdr_stream *xdr, struct nfs_fattr *result) | |||
| 489 | error = decode_stat(xdr, &status); | 490 | error = decode_stat(xdr, &status); |
| 490 | if (unlikely(error)) | 491 | if (unlikely(error)) |
| 491 | goto out; | 492 | goto out; |
| 493 | if (op_status) | ||
| 494 | *op_status = status; | ||
| 492 | if (status != NFS_OK) | 495 | if (status != NFS_OK) |
| 493 | goto out_default; | 496 | goto out_default; |
| 494 | error = decode_fattr(xdr, result); | 497 | error = decode_fattr(xdr, result); |
| @@ -808,7 +811,7 @@ out_default: | |||
| 808 | static int nfs2_xdr_dec_attrstat(struct rpc_rqst *req, struct xdr_stream *xdr, | 811 | static int nfs2_xdr_dec_attrstat(struct rpc_rqst *req, struct xdr_stream *xdr, |
| 809 | struct nfs_fattr *result) | 812 | struct nfs_fattr *result) |
| 810 | { | 813 | { |
| 811 | return decode_attrstat(xdr, result); | 814 | return decode_attrstat(xdr, result, NULL); |
| 812 | } | 815 | } |
| 813 | 816 | ||
| 814 | static int nfs2_xdr_dec_diropres(struct rpc_rqst *req, struct xdr_stream *xdr, | 817 | static int nfs2_xdr_dec_diropres(struct rpc_rqst *req, struct xdr_stream *xdr, |
| @@ -865,6 +868,7 @@ static int nfs2_xdr_dec_readres(struct rpc_rqst *req, struct xdr_stream *xdr, | |||
| 865 | error = decode_stat(xdr, &status); | 868 | error = decode_stat(xdr, &status); |
| 866 | if (unlikely(error)) | 869 | if (unlikely(error)) |
| 867 | goto out; | 870 | goto out; |
| 871 | result->op_status = status; | ||
| 868 | if (status != NFS_OK) | 872 | if (status != NFS_OK) |
| 869 | goto out_default; | 873 | goto out_default; |
| 870 | error = decode_fattr(xdr, result->fattr); | 874 | error = decode_fattr(xdr, result->fattr); |
| @@ -882,7 +886,7 @@ static int nfs2_xdr_dec_writeres(struct rpc_rqst *req, struct xdr_stream *xdr, | |||
| 882 | { | 886 | { |
| 883 | /* All NFSv2 writes are "file sync" writes */ | 887 | /* All NFSv2 writes are "file sync" writes */ |
| 884 | result->verf->committed = NFS_FILE_SYNC; | 888 | result->verf->committed = NFS_FILE_SYNC; |
| 885 | return decode_attrstat(xdr, result->fattr); | 889 | return decode_attrstat(xdr, result->fattr, &result->op_status); |
| 886 | } | 890 | } |
| 887 | 891 | ||
| 888 | /** | 892 | /** |
