summaryrefslogtreecommitdiffstats
path: root/fs/lockd/host.c
diff options
context:
space:
mode:
authorChuck Lever <chuck.lever@oracle.com>2008-10-03 18:50:21 +0200
committerJ. Bruce Fields <bfields@citi.umich.edu>2008-10-03 23:02:34 +0200
commitd7d204403b31beb83b1aefef7bd76f5209369555 (patch)
tree70d63b581d4987fb12cc455f741bf21a55a7a8c3 /fs/lockd/host.c
parentlockd: Support non-AF_INET addresses in nlm_lookup_host() (diff)
downloadlinux-d7d204403b31beb83b1aefef7bd76f5209369555.tar.xz
linux-d7d204403b31beb83b1aefef7bd76f5209369555.zip
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>
Diffstat (limited to 'fs/lockd/host.c')
-rw-r--r--fs/lockd/host.c32
1 files changed, 21 insertions, 11 deletions
diff --git a/fs/lockd/host.c b/fs/lockd/host.c
index 5876b0e4c0be..cbd2398e594c 100644
--- a/fs/lockd/host.c
+++ b/fs/lockd/host.c
@@ -264,32 +264,42 @@ nlm_destroy_host(struct nlm_host *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,
- int proto, u32 version,
- const char *hostname,
- unsigned int hostname_len)
+struct nlm_host *nlmclnt_lookup_host(const struct sockaddr *sap,
+ const size_t salen,
+ const unsigned short protocol,
+ const u32 version, const char *hostname)
{
const struct sockaddr source = {
.sa_family = AF_UNSPEC,
};
struct nlm_lookup_host_info ni = {
.server = 0,
- .sap = (struct sockaddr *)sin,
- .salen = sizeof(*sin),
- .protocol = proto,
+ .sap = sap,
+ .salen = salen,
+ .protocol = protocol,
.version = version,
.hostname = hostname,
- .hostname_len = hostname_len,
+ .hostname_len = strlen(hostname),
.src_sap = &source,
.src_len = sizeof(source),
};
dprintk("lockd: %s(host='%s', vers=%u, proto=%s)\n", __func__,
(hostname ? hostname : "<none>"), version,
- (proto == IPPROTO_UDP ? "udp" : "tcp"));
+ (protocol == IPPROTO_UDP ? "udp" : "tcp"));
return nlm_lookup_host(&ni);
}