pnfsd-lexp: Export correct ipv6 address for local exports
Subsystems (2)
PATCH 1/1 pnfsd-lexp: Export correct ipv6 address for local exports
From: Michael Groshans <[email protected]>
A sockaddr is not big enough to hold most ipv6 addresses. Changed to use sockaddr_storage to hold the ipv6 address used for local exports.
Signed-off by: Michael Groshans <[email protected]>
--- fs/nfsd/pnfsd.h | 2 +- fs/nfsd/pnfsd_lexp.c | 6 +++--- include/linux/sunrpc/svc_xprt.h | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-)
fs/nfsd/pnfsd.h +1 -1
@@ -135,7 +135,7 @@ void pnfs_set_device_notify(clientid_t *, unsigned int types);void pnfs_clear_device_notify (struct nfs4_client *);#if defined(CONFIG_PNFSD_LOCAL_EXPORT ) -extern struct sockaddr pnfsd_lexp_addr; +extern struct sockaddr_storage pnfsd_lexp_addr;extern size_t pnfs_lexp_addr_len;extern void pnfsd_lexp_init (struct inode *);
fs/nfsd/pnfsd_lexp.c +3 -3
@@ -27,7 +27,7 @@#define NFSDDBG_FACILITY NFSDDBG_PNFS -struct sockaddr pnfsd_lexp_addr; +struct sockaddr_storage pnfsd_lexp_addr;size_t pnfs_lexp_addr_len;static wait_queue_head_t lo_recall_wq;
@@ -87,7 +87,7 @@ pnfsd_lexp_get_device_info(struct super_block *sb, goto out; } -/* count the number of comma-delimited DS IPs */ +/* format local address */ fdev.fl_device_length =1 ; fdev.fl_device_list = fl_devices;
@@ -100,7 +100,7 @@ pnfsd_lexp_get_device_info(struct super_block *sb,if (err <0 ) goto out; daddr.r_addr.len = err; -switch (pnfsd_lexp_addr.sa_family) { +switch (pnfsd_lexp_addr.ss_family) {case AF_INET : daddr.r_netid.data ="tcp" ; daddr.r_netid.len =3 ;
include/linux/sunrpc/svc_xprt.h +3 -3
@@ -208,13 +208,13 @@ static inline char *__svc_print_addr(const struct sockaddr *addr,/* * Print a network address in a universal format (see rfc1833 and nfsv4.1) */ -static inline int __svc_print_netaddr (struct sockaddr *addr, +static inline int __svc_print_netaddr (struct sockaddr_storage *addr,struct xdr_netobj *na) {u16 port;ssize_t len; -switch (addr->sa_family) { +switch (addr->ss_family) {case AF_INET : {struct sockaddr_in *sin = (struct sockaddr_in *)addr; port =ntohs (sin->sin_port);
@@ -235,7 +235,7 @@ static inline int __svc_print_netaddr(struct sockaddr *addr, }default :snprintf (na->data, na->len,"unknown address type: %d" , - addr->sa_family); + addr->ss_family); len = -EINVAL ;break ; }
Signature · 1 line
1.7.3.4