summaryrefslogtreecommitdiff
path: root/fs/nfsd/cache.h
diff options
context:
space:
mode:
authorJeff Layton <jlayton@redhat.com>2013-01-28 19:41:07 (GMT)
committerJ. Bruce Fields <bfields@redhat.com>2013-02-04 14:16:19 (GMT)
commit7b9e8522a65886d8ae168547a67c3617b6ba83f1 (patch)
tree285c0d08f3e967abb7e3c33e4846da353270183b /fs/nfsd/cache.h
parent885c91f74662404dc179b8775494df383479311c (diff)
downloadlinux-7b9e8522a65886d8ae168547a67c3617b6ba83f1.tar.xz
nfsd: fix IPv6 address handling in the DRC
Currently, it only stores the first 16 bytes of any address. struct sockaddr_in6 is 28 bytes however, so we're currently ignoring the last 12 bytes of the address. Expand the c_addr field to a sockaddr_in6, and cast it to a sockaddr_in as necessary. Also fix the comparitor to use the existing RPC helpers for this. Signed-off-by: Jeff Layton <jlayton@redhat.com> Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'fs/nfsd/cache.h')
-rw-r--r--fs/nfsd/cache.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/fs/nfsd/cache.h b/fs/nfsd/cache.h
index 93cc9d3..2cac76c 100644
--- a/fs/nfsd/cache.h
+++ b/fs/nfsd/cache.h
@@ -12,6 +12,10 @@
/*
* Representation of a reply cache entry.
+ *
+ * Note that we use a sockaddr_in6 to hold the address instead of the more
+ * typical sockaddr_storage. This is for space reasons, since sockaddr_storage
+ * is much larger than a sockaddr_in6.
*/
struct svc_cacherep {
struct hlist_node c_hash;
@@ -20,7 +24,7 @@ struct svc_cacherep {
unsigned char c_state, /* unused, inprog, done */
c_type, /* status, buffer */
c_secure : 1; /* req came from port < 1024 */
- struct sockaddr_in c_addr;
+ struct sockaddr_in6 c_addr;
__be32 c_xid;
u32 c_prot;
u32 c_proc;