diff options
Diffstat (limited to 'fs/nfs/nfs4xdr.c')
-rw-r--r-- | fs/nfs/nfs4xdr.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c index e437fd6a819f..38f3b582e7c2 100644 --- a/fs/nfs/nfs4xdr.c +++ b/fs/nfs/nfs4xdr.c | |||
@@ -38,7 +38,6 @@ | |||
38 | #include <linux/param.h> | 38 | #include <linux/param.h> |
39 | #include <linux/time.h> | 39 | #include <linux/time.h> |
40 | #include <linux/mm.h> | 40 | #include <linux/mm.h> |
41 | #include <linux/slab.h> | ||
42 | #include <linux/errno.h> | 41 | #include <linux/errno.h> |
43 | #include <linux/string.h> | 42 | #include <linux/string.h> |
44 | #include <linux/in.h> | 43 | #include <linux/in.h> |
@@ -1578,6 +1577,14 @@ static void encode_create_session(struct xdr_stream *xdr, | |||
1578 | char machine_name[NFS4_MAX_MACHINE_NAME_LEN]; | 1577 | char machine_name[NFS4_MAX_MACHINE_NAME_LEN]; |
1579 | uint32_t len; | 1578 | uint32_t len; |
1580 | struct nfs_client *clp = args->client; | 1579 | struct nfs_client *clp = args->client; |
1580 | u32 max_resp_sz_cached; | ||
1581 | |||
1582 | /* | ||
1583 | * Assumes OPEN is the biggest non-idempotent compound. | ||
1584 | * 2 is the verifier. | ||
1585 | */ | ||
1586 | max_resp_sz_cached = (NFS4_dec_open_sz + RPC_REPHDRSIZE + | ||
1587 | RPC_MAX_AUTH_SIZE + 2) * XDR_UNIT; | ||
1581 | 1588 | ||
1582 | len = scnprintf(machine_name, sizeof(machine_name), "%s", | 1589 | len = scnprintf(machine_name, sizeof(machine_name), "%s", |
1583 | clp->cl_ipaddr); | 1590 | clp->cl_ipaddr); |
@@ -1592,7 +1599,7 @@ static void encode_create_session(struct xdr_stream *xdr, | |||
1592 | *p++ = cpu_to_be32(args->fc_attrs.headerpadsz); /* header padding size */ | 1599 | *p++ = cpu_to_be32(args->fc_attrs.headerpadsz); /* header padding size */ |
1593 | *p++ = cpu_to_be32(args->fc_attrs.max_rqst_sz); /* max req size */ | 1600 | *p++ = cpu_to_be32(args->fc_attrs.max_rqst_sz); /* max req size */ |
1594 | *p++ = cpu_to_be32(args->fc_attrs.max_resp_sz); /* max resp size */ | 1601 | *p++ = cpu_to_be32(args->fc_attrs.max_resp_sz); /* max resp size */ |
1595 | *p++ = cpu_to_be32(args->fc_attrs.max_resp_sz_cached); /* Max resp sz cached */ | 1602 | *p++ = cpu_to_be32(max_resp_sz_cached); /* Max resp sz cached */ |
1596 | *p++ = cpu_to_be32(args->fc_attrs.max_ops); /* max operations */ | 1603 | *p++ = cpu_to_be32(args->fc_attrs.max_ops); /* max operations */ |
1597 | *p++ = cpu_to_be32(args->fc_attrs.max_reqs); /* max requests */ | 1604 | *p++ = cpu_to_be32(args->fc_attrs.max_reqs); /* max requests */ |
1598 | *p++ = cpu_to_be32(0); /* rdmachannel_attrs */ | 1605 | *p++ = cpu_to_be32(0); /* rdmachannel_attrs */ |
@@ -4631,7 +4638,7 @@ static int decode_sequence(struct xdr_stream *xdr, | |||
4631 | * If the server returns different values for sessionID, slotID or | 4638 | * If the server returns different values for sessionID, slotID or |
4632 | * sequence number, the server is looney tunes. | 4639 | * sequence number, the server is looney tunes. |
4633 | */ | 4640 | */ |
4634 | status = -ESERVERFAULT; | 4641 | status = -EREMOTEIO; |
4635 | 4642 | ||
4636 | if (memcmp(id.data, res->sr_session->sess_id.data, | 4643 | if (memcmp(id.data, res->sr_session->sess_id.data, |
4637 | NFS4_MAX_SESSIONID_LEN)) { | 4644 | NFS4_MAX_SESSIONID_LEN)) { |
@@ -5544,6 +5551,8 @@ static int nfs4_xdr_dec_delegreturn(struct rpc_rqst *rqstp, __be32 *p, struct nf | |||
5544 | if (status != 0) | 5551 | if (status != 0) |
5545 | goto out; | 5552 | goto out; |
5546 | status = decode_delegreturn(&xdr); | 5553 | status = decode_delegreturn(&xdr); |
5554 | if (status != 0) | ||
5555 | goto out; | ||
5547 | decode_getfattr(&xdr, res->fattr, res->server, | 5556 | decode_getfattr(&xdr, res->fattr, res->server, |
5548 | !RPC_IS_ASYNC(rqstp->rq_task)); | 5557 | !RPC_IS_ASYNC(rqstp->rq_task)); |
5549 | out: | 5558 | out: |
@@ -5774,7 +5783,7 @@ static struct { | |||
5774 | { NFS4ERR_BAD_COOKIE, -EBADCOOKIE }, | 5783 | { NFS4ERR_BAD_COOKIE, -EBADCOOKIE }, |
5775 | { NFS4ERR_NOTSUPP, -ENOTSUPP }, | 5784 | { NFS4ERR_NOTSUPP, -ENOTSUPP }, |
5776 | { NFS4ERR_TOOSMALL, -ETOOSMALL }, | 5785 | { NFS4ERR_TOOSMALL, -ETOOSMALL }, |
5777 | { NFS4ERR_SERVERFAULT, -ESERVERFAULT }, | 5786 | { NFS4ERR_SERVERFAULT, -EREMOTEIO }, |
5778 | { NFS4ERR_BADTYPE, -EBADTYPE }, | 5787 | { NFS4ERR_BADTYPE, -EBADTYPE }, |
5779 | { NFS4ERR_LOCKED, -EAGAIN }, | 5788 | { NFS4ERR_LOCKED, -EAGAIN }, |
5780 | { NFS4ERR_SYMLINK, -ELOOP }, | 5789 | { NFS4ERR_SYMLINK, -ELOOP }, |
@@ -5801,7 +5810,7 @@ nfs4_stat_to_errno(int stat) | |||
5801 | } | 5810 | } |
5802 | if (stat <= 10000 || stat > 10100) { | 5811 | if (stat <= 10000 || stat > 10100) { |
5803 | /* The server is looney tunes. */ | 5812 | /* The server is looney tunes. */ |
5804 | return -ESERVERFAULT; | 5813 | return -EREMOTEIO; |
5805 | } | 5814 | } |
5806 | /* If we cannot translate the error, the recovery routines should | 5815 | /* If we cannot translate the error, the recovery routines should |
5807 | * handle it. | 5816 | * handle it. |