diff options
Diffstat (limited to 'fs/nfs/nfs4xdr.c')
-rw-r--r-- | fs/nfs/nfs4xdr.c | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c index 3ee3a1669d28..6f1bf182e0e0 100644 --- a/fs/nfs/nfs4xdr.c +++ b/fs/nfs/nfs4xdr.c | |||
@@ -159,16 +159,20 @@ static int nfs_stat_to_errno(int); | |||
159 | op_decode_hdr_maxsz + 2) | 159 | op_decode_hdr_maxsz + 2) |
160 | #define NFS4_enc_write_sz (compound_encode_hdr_maxsz + \ | 160 | #define NFS4_enc_write_sz (compound_encode_hdr_maxsz + \ |
161 | encode_putfh_maxsz + \ | 161 | encode_putfh_maxsz + \ |
162 | op_encode_hdr_maxsz + 8) | 162 | op_encode_hdr_maxsz + 8 + \ |
163 | encode_getattr_maxsz) | ||
163 | #define NFS4_dec_write_sz (compound_decode_hdr_maxsz + \ | 164 | #define NFS4_dec_write_sz (compound_decode_hdr_maxsz + \ |
164 | decode_putfh_maxsz + \ | 165 | decode_putfh_maxsz + \ |
165 | op_decode_hdr_maxsz + 4) | 166 | op_decode_hdr_maxsz + 4 + \ |
167 | decode_getattr_maxsz) | ||
166 | #define NFS4_enc_commit_sz (compound_encode_hdr_maxsz + \ | 168 | #define NFS4_enc_commit_sz (compound_encode_hdr_maxsz + \ |
167 | encode_putfh_maxsz + \ | 169 | encode_putfh_maxsz + \ |
168 | op_encode_hdr_maxsz + 3) | 170 | op_encode_hdr_maxsz + 3 + \ |
171 | encode_getattr_maxsz) | ||
169 | #define NFS4_dec_commit_sz (compound_decode_hdr_maxsz + \ | 172 | #define NFS4_dec_commit_sz (compound_decode_hdr_maxsz + \ |
170 | decode_putfh_maxsz + \ | 173 | decode_putfh_maxsz + \ |
171 | op_decode_hdr_maxsz + 2) | 174 | op_decode_hdr_maxsz + 2 + \ |
175 | decode_getattr_maxsz) | ||
172 | #define NFS4_enc_open_sz (compound_encode_hdr_maxsz + \ | 176 | #define NFS4_enc_open_sz (compound_encode_hdr_maxsz + \ |
173 | encode_putfh_maxsz + \ | 177 | encode_putfh_maxsz + \ |
174 | op_encode_hdr_maxsz + \ | 178 | op_encode_hdr_maxsz + \ |
@@ -1799,7 +1803,7 @@ static int nfs4_xdr_enc_write(struct rpc_rqst *req, uint32_t *p, struct nfs_writ | |||
1799 | { | 1803 | { |
1800 | struct xdr_stream xdr; | 1804 | struct xdr_stream xdr; |
1801 | struct compound_hdr hdr = { | 1805 | struct compound_hdr hdr = { |
1802 | .nops = 2, | 1806 | .nops = 3, |
1803 | }; | 1807 | }; |
1804 | int status; | 1808 | int status; |
1805 | 1809 | ||
@@ -1809,6 +1813,9 @@ static int nfs4_xdr_enc_write(struct rpc_rqst *req, uint32_t *p, struct nfs_writ | |||
1809 | if (status) | 1813 | if (status) |
1810 | goto out; | 1814 | goto out; |
1811 | status = encode_write(&xdr, args); | 1815 | status = encode_write(&xdr, args); |
1816 | if (status) | ||
1817 | goto out; | ||
1818 | status = encode_getfattr(&xdr, args->bitmask); | ||
1812 | out: | 1819 | out: |
1813 | return status; | 1820 | return status; |
1814 | } | 1821 | } |
@@ -1820,7 +1827,7 @@ static int nfs4_xdr_enc_commit(struct rpc_rqst *req, uint32_t *p, struct nfs_wri | |||
1820 | { | 1827 | { |
1821 | struct xdr_stream xdr; | 1828 | struct xdr_stream xdr; |
1822 | struct compound_hdr hdr = { | 1829 | struct compound_hdr hdr = { |
1823 | .nops = 2, | 1830 | .nops = 3, |
1824 | }; | 1831 | }; |
1825 | int status; | 1832 | int status; |
1826 | 1833 | ||
@@ -1830,6 +1837,9 @@ static int nfs4_xdr_enc_commit(struct rpc_rqst *req, uint32_t *p, struct nfs_wri | |||
1830 | if (status) | 1837 | if (status) |
1831 | goto out; | 1838 | goto out; |
1832 | status = encode_commit(&xdr, args); | 1839 | status = encode_commit(&xdr, args); |
1840 | if (status) | ||
1841 | goto out; | ||
1842 | status = encode_getfattr(&xdr, args->bitmask); | ||
1833 | out: | 1843 | out: |
1834 | return status; | 1844 | return status; |
1835 | } | 1845 | } |
@@ -4001,6 +4011,9 @@ static int nfs4_xdr_dec_write(struct rpc_rqst *rqstp, uint32_t *p, struct nfs_wr | |||
4001 | if (status) | 4011 | if (status) |
4002 | goto out; | 4012 | goto out; |
4003 | status = decode_write(&xdr, res); | 4013 | status = decode_write(&xdr, res); |
4014 | if (status) | ||
4015 | goto out; | ||
4016 | decode_getfattr(&xdr, res->fattr, res->server); | ||
4004 | if (!status) | 4017 | if (!status) |
4005 | status = res->count; | 4018 | status = res->count; |
4006 | out: | 4019 | out: |
@@ -4024,6 +4037,9 @@ static int nfs4_xdr_dec_commit(struct rpc_rqst *rqstp, uint32_t *p, struct nfs_w | |||
4024 | if (status) | 4037 | if (status) |
4025 | goto out; | 4038 | goto out; |
4026 | status = decode_commit(&xdr, res); | 4039 | status = decode_commit(&xdr, res); |
4040 | if (status) | ||
4041 | goto out; | ||
4042 | decode_getfattr(&xdr, res->fattr, res->server); | ||
4027 | out: | 4043 | out: |
4028 | return status; | 4044 | return status; |
4029 | } | 4045 | } |