diff options
author | Chuck Lever <chuck.lever@oracle.com> | 2007-08-06 11:56:57 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2007-10-09 17:15:49 -0400 |
commit | 0c43b3d81cca46ab2469f8802f8bd68b49f1b2a5 (patch) | |
tree | b8233aba6352474e8e440a6228e97875aa2e7728 /net | |
parent | bda243df2f5beebce92bae22bc01960544783984 (diff) |
SUNRPC: Free address buffers in a loop
Use more generic logic to free buffers holding formatted addresses. This
makes it less likely a bug will be introduced when adding additional buffer
types in xs_format_peer_address().
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'net')
-rw-r--r-- | net/sunrpc/xprtsock.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c index 015f29edb619..b3f40b8dbcba 100644 --- a/net/sunrpc/xprtsock.c +++ b/net/sunrpc/xprtsock.c | |||
@@ -279,10 +279,14 @@ static void xs_format_peer_addresses(struct rpc_xprt *xprt) | |||
279 | } | 279 | } |
280 | xprt->address_strings[RPC_DISPLAY_PORT] = buf; | 280 | xprt->address_strings[RPC_DISPLAY_PORT] = buf; |
281 | 281 | ||
282 | if (xprt->prot == IPPROTO_UDP) | 282 | buf = kzalloc(8, GFP_KERNEL); |
283 | xprt->address_strings[RPC_DISPLAY_PROTO] = "udp"; | 283 | if (buf) { |
284 | else | 284 | if (xprt->prot == IPPROTO_UDP) |
285 | xprt->address_strings[RPC_DISPLAY_PROTO] = "tcp"; | 285 | snprintf(buf, 8, "udp"); |
286 | else | ||
287 | snprintf(buf, 8, "tcp"); | ||
288 | } | ||
289 | xprt->address_strings[RPC_DISPLAY_PROTO] = buf; | ||
286 | 290 | ||
287 | buf = kzalloc(48, GFP_KERNEL); | 291 | buf = kzalloc(48, GFP_KERNEL); |
288 | if (buf) { | 292 | if (buf) { |
@@ -296,9 +300,10 @@ static void xs_format_peer_addresses(struct rpc_xprt *xprt) | |||
296 | 300 | ||
297 | static void xs_free_peer_addresses(struct rpc_xprt *xprt) | 301 | static void xs_free_peer_addresses(struct rpc_xprt *xprt) |
298 | { | 302 | { |
299 | kfree(xprt->address_strings[RPC_DISPLAY_ADDR]); | 303 | int i; |
300 | kfree(xprt->address_strings[RPC_DISPLAY_PORT]); | 304 | |
301 | kfree(xprt->address_strings[RPC_DISPLAY_ALL]); | 305 | for (i = 0; i < RPC_DISPLAY_MAX; i++) |
306 | kfree(xprt->address_strings[i]); | ||
302 | } | 307 | } |
303 | 308 | ||
304 | #define XS_SENDMSG_FLAGS (MSG_DONTWAIT | MSG_NOSIGNAL) | 309 | #define XS_SENDMSG_FLAGS (MSG_DONTWAIT | MSG_NOSIGNAL) |