diff options
author | Andy Adamson <andros@netapp.com> | 2013-06-25 19:02:53 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2013-06-28 15:34:43 -0400 |
commit | f1c097be2b35dcfc06c1c591194d78058dd67284 (patch) | |
tree | 62c9361ea865c30757d0400dbadb1676b3bfb72e /fs/nfs/nfs4xdr.c | |
parent | ffa57b9e53cf7ace3e63e5fa9f91ffb31e0aacf6 (diff) |
NFSv4.1 Fix gdia_maxcount calculation to fit in ca_maxresponsesize
The GETDEVICEINFO gdia_maxcount represents all of the data being returned
within the GETDEVICEINFO4resok structure and includes the XDR overhead.
The CREATE_SESSION ca_maxresponsesize is the maximum reply and includes the RPC
headers (including security flavor credentials and verifiers).
Split out the struct pnfs_device field maxcount which is the gdia_maxcount
from the pglen field which is the reply (the total) buffer length.
Signed-off-by: Andy Adamson <andros@netapp.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfs/nfs4xdr.c')
-rw-r--r-- | fs/nfs/nfs4xdr.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c index 4be8d135ed61..27cc76d88f9a 100644 --- a/fs/nfs/nfs4xdr.c +++ b/fs/nfs/nfs4xdr.c | |||
@@ -853,6 +853,12 @@ const u32 nfs41_maxread_overhead = ((RPC_MAX_HEADER_WITH_AUTH + | |||
853 | decode_sequence_maxsz + | 853 | decode_sequence_maxsz + |
854 | decode_putfh_maxsz) * | 854 | decode_putfh_maxsz) * |
855 | XDR_UNIT); | 855 | XDR_UNIT); |
856 | |||
857 | const u32 nfs41_maxgetdevinfo_overhead = ((RPC_MAX_REPHEADER_WITH_AUTH + | ||
858 | compound_decode_hdr_maxsz + | ||
859 | decode_sequence_maxsz) * | ||
860 | XDR_UNIT); | ||
861 | EXPORT_SYMBOL_GPL(nfs41_maxgetdevinfo_overhead); | ||
856 | #endif /* CONFIG_NFS_V4_1 */ | 862 | #endif /* CONFIG_NFS_V4_1 */ |
857 | 863 | ||
858 | static const umode_t nfs_type2fmt[] = { | 864 | static const umode_t nfs_type2fmt[] = { |
@@ -1889,7 +1895,7 @@ encode_getdeviceinfo(struct xdr_stream *xdr, | |||
1889 | p = xdr_encode_opaque_fixed(p, args->pdev->dev_id.data, | 1895 | p = xdr_encode_opaque_fixed(p, args->pdev->dev_id.data, |
1890 | NFS4_DEVICEID4_SIZE); | 1896 | NFS4_DEVICEID4_SIZE); |
1891 | *p++ = cpu_to_be32(args->pdev->layout_type); | 1897 | *p++ = cpu_to_be32(args->pdev->layout_type); |
1892 | *p++ = cpu_to_be32(args->pdev->pglen); /* gdia_maxcount */ | 1898 | *p++ = cpu_to_be32(args->pdev->maxcount); /* gdia_maxcount */ |
1893 | *p++ = cpu_to_be32(0); /* bitmap length 0 */ | 1899 | *p++ = cpu_to_be32(0); /* bitmap length 0 */ |
1894 | } | 1900 | } |
1895 | 1901 | ||