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

Commit 90151e6e authored by Chuck Lever's avatar Chuck Lever Committed by J. Bruce Fields
Browse files

lockd: Use sockaddr_storage for h_saddr field



To store larger addresses in the nlm_host structure, make h_saddr a
sockaddr_storage.  And let's call it something more self-explanatory:
"saddr" could easily be mistaken for "server address".

Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
Signed-off-by: default avatarJ. Bruce Fields <bfields@citi.umich.edu>
parent b4ed58fd
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -129,7 +129,7 @@ static struct nlm_host *nlm_lookup_host(int server,
			continue;
		if (host->h_server != server)
			continue;
		if (!nlm_cmp_addr(&host->h_saddr, ssin))
		if (!nlm_cmp_addr(nlm_srcaddr_in(host), ssin))
			continue;

		/* Move to head of hash chain. */
@@ -168,7 +168,7 @@ static struct nlm_host *nlm_lookup_host(int server,
	memcpy(nlm_addr(host), sin, sizeof(*sin));
	host->h_addrlen = sizeof(*sin);
	nlm_clear_port(nlm_addr(host));
	host->h_saddr	   = *ssin;
	memcpy(nlm_srcaddr(host), ssin, sizeof(*ssin));
	host->h_version    = version;
	host->h_proto      = proto;
	host->h_rpcclnt    = NULL;
@@ -192,8 +192,8 @@ static struct nlm_host *nlm_lookup_host(int server,

	nlm_display_address((struct sockaddr *)&host->h_addr,
				host->h_addrbuf, sizeof(host->h_addrbuf));
	nlm_display_address((struct sockaddr *)&host->h_saddr,
				host->h_saddrbuf, sizeof(host->h_saddrbuf));
	nlm_display_address((struct sockaddr *)&host->h_srcaddr,
				host->h_srcaddrbuf, sizeof(host->h_srcaddrbuf));

	dprintk("lockd: nlm_lookup_host created host %s\n",
			host->h_name);
@@ -267,7 +267,7 @@ nlm_bind_host(struct nlm_host *host)
	struct rpc_clnt	*clnt;

	dprintk("lockd: nlm_bind_host %s (%s), my addr=%s\n",
			host->h_name, host->h_addrbuf, host->h_saddrbuf);
			host->h_name, host->h_addrbuf, host->h_srcaddrbuf);

	/* Lock host handle */
	mutex_lock(&host->h_mutex);
@@ -294,7 +294,7 @@ nlm_bind_host(struct nlm_host *host)
			.protocol	= host->h_proto,
			.address	= nlm_addr(host),
			.addrsize	= host->h_addrlen,
			.saddress	= (struct sockaddr *)&host->h_saddr,
			.saddress	= nlm_srcaddr(host),
			.timeout	= &timeparms,
			.servername	= host->h_name,
			.program	= &nlm_program,
+1 −1
Original line number Diff line number Diff line
@@ -418,7 +418,7 @@ EXPORT_SYMBOL_GPL(nlmsvc_unlock_all_by_sb);
static int
nlmsvc_match_ip(void *datap, struct nlm_host *host)
{
	return nlm_cmp_addr(&host->h_saddr, datap);
	return nlm_cmp_addr(nlm_srcaddr_in(host), datap);
}

/**
+12 −2
Original line number Diff line number Diff line
@@ -40,7 +40,7 @@ struct nlm_host {
	struct hlist_node	h_hash;		/* doubly linked list */
	struct sockaddr_storage	h_addr;		/* peer address */
	size_t			h_addrlen;
	struct sockaddr_in	h_saddr;	/* our address (optional) */
	struct sockaddr_storage	h_srcaddr;	/* our address (optional) */
	struct rpc_clnt	*	h_rpcclnt;	/* RPC client to talk to peer */
	char *			h_name;		/* remote hostname */
	u32			h_version;	/* interface version */
@@ -64,7 +64,7 @@ struct nlm_host {
	struct nsm_handle *	h_nsmhandle;	/* NSM status handle */

	char			h_addrbuf[48],	/* address eyecatchers */
				h_saddrbuf[48];
				h_srcaddrbuf[48];
};

struct nsm_handle {
@@ -90,6 +90,16 @@ static inline struct sockaddr *nlm_addr(const struct nlm_host *host)
	return (struct sockaddr *)&host->h_addr;
}

static inline struct sockaddr_in *nlm_srcaddr_in(const struct nlm_host *host)
{
	return (struct sockaddr_in *)&host->h_srcaddr;
}

static inline struct sockaddr *nlm_srcaddr(const struct nlm_host *host)
{
	return (struct sockaddr *)&host->h_srcaddr;
}

/*
 * Map an fl_owner_t into a unique 32-bit "pid"
 */