aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/linux/sunrpc/clnt.h2
-rw-r--r--include/linux/sunrpc/xprt.h2
-rw-r--r--net/sunrpc/clnt.c3
-rw-r--r--net/sunrpc/rpcb_clnt.c2
-rw-r--r--net/sunrpc/xprtsock.c56
5 files changed, 27 insertions, 38 deletions
diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h
index 51a338189a23..5a13da2573b0 100644
--- a/include/linux/sunrpc/clnt.h
+++ b/include/linux/sunrpc/clnt.h
@@ -143,7 +143,7 @@ void rpc_setbufsize(struct rpc_clnt *, unsigned int, unsigned int);
143size_t rpc_max_payload(struct rpc_clnt *); 143size_t rpc_max_payload(struct rpc_clnt *);
144void rpc_force_rebind(struct rpc_clnt *); 144void rpc_force_rebind(struct rpc_clnt *);
145size_t rpc_peeraddr(struct rpc_clnt *, struct sockaddr *, size_t); 145size_t rpc_peeraddr(struct rpc_clnt *, struct sockaddr *, size_t);
146char * rpc_peeraddr2str(struct rpc_clnt *, enum rpc_display_format_t); 146const char *rpc_peeraddr2str(struct rpc_clnt *, enum rpc_display_format_t);
147 147
148#endif /* __KERNEL__ */ 148#endif /* __KERNEL__ */
149#endif /* _LINUX_SUNRPC_CLNT_H */ 149#endif /* _LINUX_SUNRPC_CLNT_H */
diff --git a/include/linux/sunrpc/xprt.h b/include/linux/sunrpc/xprt.h
index c3364d88d83e..b3ff9a815e6f 100644
--- a/include/linux/sunrpc/xprt.h
+++ b/include/linux/sunrpc/xprt.h
@@ -183,7 +183,7 @@ struct rpc_xprt {
183 bklog_u; /* backlog queue utilization */ 183 bklog_u; /* backlog queue utilization */
184 } stat; 184 } stat;
185 185
186 char * address_strings[RPC_DISPLAY_MAX]; 186 const char *address_strings[RPC_DISPLAY_MAX];
187}; 187};
188 188
189struct xprt_create { 189struct xprt_create {
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
index a3c00da9ce21..e775ca793249 100644
--- a/net/sunrpc/clnt.c
+++ b/net/sunrpc/clnt.c
@@ -679,7 +679,8 @@ EXPORT_SYMBOL_GPL(rpc_peeraddr);
679 * @format: address format 679 * @format: address format
680 * 680 *
681 */ 681 */
682char *rpc_peeraddr2str(struct rpc_clnt *clnt, enum rpc_display_format_t format) 682const char *rpc_peeraddr2str(struct rpc_clnt *clnt,
683 enum rpc_display_format_t format)
683{ 684{
684 struct rpc_xprt *xprt = clnt->cl_xprt; 685 struct rpc_xprt *xprt = clnt->cl_xprt;
685 686
diff --git a/net/sunrpc/rpcb_clnt.c b/net/sunrpc/rpcb_clnt.c
index f494e58910ec..b60fa92321a5 100644
--- a/net/sunrpc/rpcb_clnt.c
+++ b/net/sunrpc/rpcb_clnt.c
@@ -358,7 +358,7 @@ void rpcb_getport_async(struct rpc_task *task)
358 map->r_prot = xprt->prot; 358 map->r_prot = xprt->prot;
359 map->r_port = 0; 359 map->r_port = 0;
360 map->r_xprt = xprt_get(xprt); 360 map->r_xprt = xprt_get(xprt);
361 map->r_netid = rpc_peeraddr2str(clnt, RPC_DISPLAY_NETID); 361 map->r_netid = (char *)rpc_peeraddr2str(clnt, RPC_DISPLAY_NETID);
362 memcpy(map->r_addr, 362 memcpy(map->r_addr,
363 rpc_peeraddr2str(rpcb_clnt, RPC_DISPLAY_UNIVERSAL_ADDR), 363 rpc_peeraddr2str(rpcb_clnt, RPC_DISPLAY_UNIVERSAL_ADDR),
364 sizeof(map->r_addr)); 364 sizeof(map->r_addr));
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
index 6ba329d339a2..b9b94f49c620 100644
--- a/net/sunrpc/xprtsock.c
+++ b/net/sunrpc/xprtsock.c
@@ -280,7 +280,9 @@ static inline struct sockaddr_in6 *xs_addr_in6(struct rpc_xprt *xprt)
280 return (struct sockaddr_in6 *) &xprt->addr; 280 return (struct sockaddr_in6 *) &xprt->addr;
281} 281}
282 282
283static void xs_format_ipv4_peer_addresses(struct rpc_xprt *xprt) 283static void xs_format_ipv4_peer_addresses(struct rpc_xprt *xprt,
284 const char *protocol,
285 const char *netid)
284{ 286{
285 struct sockaddr_in *addr = xs_addr_in(xprt); 287 struct sockaddr_in *addr = xs_addr_in(xprt);
286 char *buf; 288 char *buf;
@@ -299,21 +301,14 @@ static void xs_format_ipv4_peer_addresses(struct rpc_xprt *xprt)
299 } 301 }
300 xprt->address_strings[RPC_DISPLAY_PORT] = buf; 302 xprt->address_strings[RPC_DISPLAY_PORT] = buf;
301 303
302 buf = kzalloc(8, GFP_KERNEL); 304 xprt->address_strings[RPC_DISPLAY_PROTO] = protocol;
303 if (buf) {
304 if (xprt->prot == IPPROTO_UDP)
305 snprintf(buf, 8, "udp");
306 else
307 snprintf(buf, 8, "tcp");
308 }
309 xprt->address_strings[RPC_DISPLAY_PROTO] = buf;
310 305
311 buf = kzalloc(48, GFP_KERNEL); 306 buf = kzalloc(48, GFP_KERNEL);
312 if (buf) { 307 if (buf) {
313 snprintf(buf, 48, "addr="NIPQUAD_FMT" port=%u proto=%s", 308 snprintf(buf, 48, "addr="NIPQUAD_FMT" port=%u proto=%s",
314 NIPQUAD(addr->sin_addr.s_addr), 309 NIPQUAD(addr->sin_addr.s_addr),
315 ntohs(addr->sin_port), 310 ntohs(addr->sin_port),
316 xprt->prot == IPPROTO_UDP ? "udp" : "tcp"); 311 protocol);
317 } 312 }
318 xprt->address_strings[RPC_DISPLAY_ALL] = buf; 313 xprt->address_strings[RPC_DISPLAY_ALL] = buf;
319 314
@@ -340,12 +335,12 @@ static void xs_format_ipv4_peer_addresses(struct rpc_xprt *xprt)
340 } 335 }
341 xprt->address_strings[RPC_DISPLAY_UNIVERSAL_ADDR] = buf; 336 xprt->address_strings[RPC_DISPLAY_UNIVERSAL_ADDR] = buf;
342 337
343 xprt->address_strings[RPC_DISPLAY_NETID] = 338 xprt->address_strings[RPC_DISPLAY_NETID] = netid;
344 kstrdup(xprt->prot == IPPROTO_UDP ?
345 RPCBIND_NETID_UDP : RPCBIND_NETID_TCP, GFP_KERNEL);
346} 339}
347 340
348static void xs_format_ipv6_peer_addresses(struct rpc_xprt *xprt) 341static void xs_format_ipv6_peer_addresses(struct rpc_xprt *xprt,
342 const char *protocol,
343 const char *netid)
349{ 344{
350 struct sockaddr_in6 *addr = xs_addr_in6(xprt); 345 struct sockaddr_in6 *addr = xs_addr_in6(xprt);
351 char *buf; 346 char *buf;
@@ -364,21 +359,14 @@ static void xs_format_ipv6_peer_addresses(struct rpc_xprt *xprt)
364 } 359 }
365 xprt->address_strings[RPC_DISPLAY_PORT] = buf; 360 xprt->address_strings[RPC_DISPLAY_PORT] = buf;
366 361
367 buf = kzalloc(8, GFP_KERNEL); 362 xprt->address_strings[RPC_DISPLAY_PROTO] = protocol;
368 if (buf) {
369 if (xprt->prot == IPPROTO_UDP)
370 snprintf(buf, 8, "udp");
371 else
372 snprintf(buf, 8, "tcp");
373 }
374 xprt->address_strings[RPC_DISPLAY_PROTO] = buf;
375 363
376 buf = kzalloc(64, GFP_KERNEL); 364 buf = kzalloc(64, GFP_KERNEL);
377 if (buf) { 365 if (buf) {
378 snprintf(buf, 64, "addr="NIP6_FMT" port=%u proto=%s", 366 snprintf(buf, 64, "addr="NIP6_FMT" port=%u proto=%s",
379 NIP6(addr->sin6_addr), 367 NIP6(addr->sin6_addr),
380 ntohs(addr->sin6_port), 368 ntohs(addr->sin6_port),
381 xprt->prot == IPPROTO_UDP ? "udp" : "tcp"); 369 protocol);
382 } 370 }
383 xprt->address_strings[RPC_DISPLAY_ALL] = buf; 371 xprt->address_strings[RPC_DISPLAY_ALL] = buf;
384 372
@@ -405,17 +393,17 @@ static void xs_format_ipv6_peer_addresses(struct rpc_xprt *xprt)
405 } 393 }
406 xprt->address_strings[RPC_DISPLAY_UNIVERSAL_ADDR] = buf; 394 xprt->address_strings[RPC_DISPLAY_UNIVERSAL_ADDR] = buf;
407 395
408 xprt->address_strings[RPC_DISPLAY_NETID] = 396 xprt->address_strings[RPC_DISPLAY_NETID] = netid;
409 kstrdup(xprt->prot == IPPROTO_UDP ?
410 RPCBIND_NETID_UDP6 : RPCBIND_NETID_TCP6, GFP_KERNEL);
411} 397}
412 398
413static void xs_free_peer_addresses(struct rpc_xprt *xprt) 399static void xs_free_peer_addresses(struct rpc_xprt *xprt)
414{ 400{
415 int i; 401 kfree(xprt->address_strings[RPC_DISPLAY_ADDR]);
416 402 kfree(xprt->address_strings[RPC_DISPLAY_PORT]);
417 for (i = 0; i < RPC_DISPLAY_MAX; i++) 403 kfree(xprt->address_strings[RPC_DISPLAY_ALL]);
418 kfree(xprt->address_strings[i]); 404 kfree(xprt->address_strings[RPC_DISPLAY_HEX_ADDR]);
405 kfree(xprt->address_strings[RPC_DISPLAY_HEX_PORT]);
406 kfree(xprt->address_strings[RPC_DISPLAY_UNIVERSAL_ADDR]);
419} 407}
420 408
421#define XS_SENDMSG_FLAGS (MSG_DONTWAIT | MSG_NOSIGNAL) 409#define XS_SENDMSG_FLAGS (MSG_DONTWAIT | MSG_NOSIGNAL)
@@ -1939,7 +1927,7 @@ static struct rpc_xprt *xs_setup_udp(struct xprt_create *args)
1939 1927
1940 INIT_DELAYED_WORK(&transport->connect_worker, 1928 INIT_DELAYED_WORK(&transport->connect_worker,
1941 xs_udp_connect_worker4); 1929 xs_udp_connect_worker4);
1942 xs_format_ipv4_peer_addresses(xprt); 1930 xs_format_ipv4_peer_addresses(xprt, "udp", RPCBIND_NETID_UDP);
1943 break; 1931 break;
1944 case AF_INET6: 1932 case AF_INET6:
1945 if (((struct sockaddr_in6 *)addr)->sin6_port != htons(0)) 1933 if (((struct sockaddr_in6 *)addr)->sin6_port != htons(0))
@@ -1947,7 +1935,7 @@ static struct rpc_xprt *xs_setup_udp(struct xprt_create *args)
1947 1935
1948 INIT_DELAYED_WORK(&transport->connect_worker, 1936 INIT_DELAYED_WORK(&transport->connect_worker,
1949 xs_udp_connect_worker6); 1937 xs_udp_connect_worker6);
1950 xs_format_ipv6_peer_addresses(xprt); 1938 xs_format_ipv6_peer_addresses(xprt, "udp", RPCBIND_NETID_UDP6);
1951 break; 1939 break;
1952 default: 1940 default:
1953 kfree(xprt); 1941 kfree(xprt);
@@ -2005,14 +1993,14 @@ static struct rpc_xprt *xs_setup_tcp(struct xprt_create *args)
2005 xprt_set_bound(xprt); 1993 xprt_set_bound(xprt);
2006 1994
2007 INIT_DELAYED_WORK(&transport->connect_worker, xs_tcp_connect_worker4); 1995 INIT_DELAYED_WORK(&transport->connect_worker, xs_tcp_connect_worker4);
2008 xs_format_ipv4_peer_addresses(xprt); 1996 xs_format_ipv4_peer_addresses(xprt, "tcp", RPCBIND_NETID_TCP);
2009 break; 1997 break;
2010 case AF_INET6: 1998 case AF_INET6:
2011 if (((struct sockaddr_in6 *)addr)->sin6_port != htons(0)) 1999 if (((struct sockaddr_in6 *)addr)->sin6_port != htons(0))
2012 xprt_set_bound(xprt); 2000 xprt_set_bound(xprt);
2013 2001
2014 INIT_DELAYED_WORK(&transport->connect_worker, xs_tcp_connect_worker6); 2002 INIT_DELAYED_WORK(&transport->connect_worker, xs_tcp_connect_worker6);
2015 xs_format_ipv6_peer_addresses(xprt); 2003 xs_format_ipv6_peer_addresses(xprt, "tcp", RPCBIND_NETID_TCP6);
2016 break; 2004 break;
2017 default: 2005 default:
2018 kfree(xprt); 2006 kfree(xprt);