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);
 }
 
 /*
  * Host cache
  */
-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);
 struct nlm_host  *nlmsvc_lookup_host(struct svc_rqst *, const char *,
                                        unsigned int);
 struct rpc_clnt * nlm_bind_host(struct nlm_host *);