Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0c43b3d8 authored by Chuck Lever's avatar Chuck Lever Committed by Trond Myklebust
Browse files

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: default avatarChuck Lever <chuck.lever@oracle.com>
Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent bda243df
Loading
Loading
Loading
Loading
+12 −7
Original line number Diff line number Diff line
@@ -279,10 +279,14 @@ static void xs_format_peer_addresses(struct rpc_xprt *xprt)
	}
	xprt->address_strings[RPC_DISPLAY_PORT] = buf;

	buf = kzalloc(8, GFP_KERNEL);
	if (buf) {
		if (xprt->prot == IPPROTO_UDP)
		xprt->address_strings[RPC_DISPLAY_PROTO] = "udp";
			snprintf(buf, 8, "udp");
		else
		xprt->address_strings[RPC_DISPLAY_PROTO] = "tcp";
			snprintf(buf, 8, "tcp");
	}
	xprt->address_strings[RPC_DISPLAY_PROTO] = buf;

	buf = kzalloc(48, GFP_KERNEL);
	if (buf) {
@@ -296,9 +300,10 @@ static void xs_format_peer_addresses(struct rpc_xprt *xprt)

static void xs_free_peer_addresses(struct rpc_xprt *xprt)
{
	kfree(xprt->address_strings[RPC_DISPLAY_ADDR]);
	kfree(xprt->address_strings[RPC_DISPLAY_PORT]);
	kfree(xprt->address_strings[RPC_DISPLAY_ALL]);
	int i;

	for (i = 0; i < RPC_DISPLAY_MAX; i++)
		kfree(xprt->address_strings[i]);
}

#define XS_SENDMSG_FLAGS	(MSG_DONTWAIT | MSG_NOSIGNAL)