lockd: Adjust nlmclnt_lookup_host() signature to accomodate non-AF_INET
Pass a struct sockaddr * and a length to nlmclnt_lookup_host() to accomodate non-AF_INET family addresses. As a side benefit, eliminate the hostname_len argument, as the hostname is always NUL-terminated. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
This commit is contained in:
parent
88541c8487
commit
d7d204403b
|
@ -58,10 +58,9 @@ struct nlm_host *nlmclnt_init(const struct nlmclnt_initdata *nlm_init)
|
||||||
if (status < 0)
|
if (status < 0)
|
||||||
return ERR_PTR(status);
|
return ERR_PTR(status);
|
||||||
|
|
||||||
host = nlmclnt_lookup_host((struct sockaddr_in *)nlm_init->address,
|
host = nlmclnt_lookup_host(nlm_init->address, nlm_init->addrlen,
|
||||||
nlm_init->protocol, nlm_version,
|
nlm_init->protocol, nlm_version,
|
||||||
nlm_init->hostname,
|
nlm_init->hostname);
|
||||||
strlen(nlm_init->hostname));
|
|
||||||
if (host == NULL) {
|
if (host == NULL) {
|
||||||
lockd_down();
|
lockd_down();
|
||||||
return ERR_PTR(-ENOLCK);
|
return ERR_PTR(-ENOLCK);
|
||||||
|
|
|
@ -264,32 +264,42 @@ nlm_destroy_host(struct nlm_host *host)
|
||||||
kfree(host);
|
kfree(host);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Find an NLM server handle in the cache. If there is none, create it.
|
* nlmclnt_lookup_host - Find an NLM host handle matching a remote server
|
||||||
|
* @sap: network address of server
|
||||||
|
* @salen: length of server address
|
||||||
|
* @protocol: transport protocol to use
|
||||||
|
* @version: NLM protocol version
|
||||||
|
* @hostname: '\0'-terminated hostname of server
|
||||||
|
*
|
||||||
|
* Returns an nlm_host structure that matches the passed-in
|
||||||
|
* [server address, transport protocol, NLM version, server hostname].
|
||||||
|
* If one doesn't already exist in the host cache, a new handle is
|
||||||
|
* created and returned.
|
||||||
*/
|
*/
|
||||||
struct nlm_host *nlmclnt_lookup_host(const struct sockaddr_in *sin,
|
struct nlm_host *nlmclnt_lookup_host(const struct sockaddr *sap,
|
||||||
int proto, u32 version,
|
const size_t salen,
|
||||||
const char *hostname,
|
const unsigned short protocol,
|
||||||
unsigned int hostname_len)
|
const u32 version, const char *hostname)
|
||||||
{
|
{
|
||||||
const struct sockaddr source = {
|
const struct sockaddr source = {
|
||||||
.sa_family = AF_UNSPEC,
|
.sa_family = AF_UNSPEC,
|
||||||
};
|
};
|
||||||
struct nlm_lookup_host_info ni = {
|
struct nlm_lookup_host_info ni = {
|
||||||
.server = 0,
|
.server = 0,
|
||||||
.sap = (struct sockaddr *)sin,
|
.sap = sap,
|
||||||
.salen = sizeof(*sin),
|
.salen = salen,
|
||||||
.protocol = proto,
|
.protocol = protocol,
|
||||||
.version = version,
|
.version = version,
|
||||||
.hostname = hostname,
|
.hostname = hostname,
|
||||||
.hostname_len = hostname_len,
|
.hostname_len = strlen(hostname),
|
||||||
.src_sap = &source,
|
.src_sap = &source,
|
||||||
.src_len = sizeof(source),
|
.src_len = sizeof(source),
|
||||||
};
|
};
|
||||||
|
|
||||||
dprintk("lockd: %s(host='%s', vers=%u, proto=%s)\n", __func__,
|
dprintk("lockd: %s(host='%s', vers=%u, proto=%s)\n", __func__,
|
||||||
(hostname ? hostname : "<none>"), version,
|
(hostname ? hostname : "<none>"), version,
|
||||||
(proto == IPPROTO_UDP ? "udp" : "tcp"));
|
(protocol == IPPROTO_UDP ? "udp" : "tcp"));
|
||||||
|
|
||||||
return nlm_lookup_host(&ni);
|
return nlm_lookup_host(&ni);
|
||||||
}
|
}
|
||||||
|
|
|
@ -215,10 +215,11 @@ void nlmclnt_next_cookie(struct nlm_cookie *);
|
||||||
/*
|
/*
|
||||||
* Host cache
|
* Host cache
|
||||||
*/
|
*/
|
||||||
struct nlm_host *nlmclnt_lookup_host(const struct sockaddr_in *sin,
|
struct nlm_host *nlmclnt_lookup_host(const struct sockaddr *sap,
|
||||||
int proto, u32 version,
|
const size_t salen,
|
||||||
const char *hostname,
|
const unsigned short protocol,
|
||||||
unsigned int hostname_len);
|
const u32 version,
|
||||||
|
const char *hostname);
|
||||||
struct nlm_host *nlmsvc_lookup_host(struct svc_rqst *, const char *,
|
struct nlm_host *nlmsvc_lookup_host(struct svc_rqst *, const char *,
|
||||||
unsigned int);
|
unsigned int);
|
||||||
struct rpc_clnt * nlm_bind_host(struct nlm_host *);
|
struct rpc_clnt * nlm_bind_host(struct nlm_host *);
|
||||||
|
|
Reference in New Issue