From: Chuck Lever <chuck.lever@oracle.com>
To: trond.myklebust@netapp.com, bfields@citi.umich.edu
Cc: linux-nfs@vger.kernel.org
Subject: [PATCH 14/16] lockd: Adjust nlmclnt_lookup_host() signature to accomodate non-AF_INET
Date: Mon, 30 Jun 2008 18:59:58 -0400 [thread overview]
Message-ID: <20080630225957.25407.71453.stgit@ellison.1015granger.net> (raw)
In-Reply-To: <20080630225011.25407.61357.stgit-ewv44WTpT0t9HhUboXbp9zCvJB+x5qRC@public.gmane.org>
Pass a struct sockaddr * and a length to nlmclnt_lookup_host() to
accomodate non-AF_INET family addresses.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
fs/lockd/clntlock.c | 5 ++---
fs/lockd/host.c | 34 ++++++++++++++++++++++++----------
include/linux/lockd/lockd.h | 9 +++++----
3 files changed, 31 insertions(+), 17 deletions(-)
diff --git a/fs/lockd/clntlock.c b/fs/lockd/clntlock.c
index 237224a..9eaf306 100644
--- a/fs/lockd/clntlock.c
+++ b/fs/lockd/clntlock.c
@@ -58,10 +58,9 @@ struct nlm_host *nlmclnt_init(const struct nlmclnt_initdata *nlm_init)
if (status < 0)
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->hostname,
- strlen(nlm_init->hostname));
+ nlm_init->hostname);
if (host == NULL) {
lockd_down();
return ERR_PTR(-ENOLCK);
diff --git a/fs/lockd/host.c b/fs/lockd/host.c
index 5a8114d..3c7916d 100644
--- a/fs/lockd/host.c
+++ b/fs/lockd/host.c
@@ -265,29 +265,43 @@ 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 = NLM_SERVER,
- .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: nlmclnt_lookup_host(host='%s', vers=%u, proto=%s)\n",
+ (hostname ? hostname : "<none>"), version,
+ (protocol == IPPROTO_UDP ? "udp" : "tcp"));
+
return nlm_lookup_host(&ni);
}
diff --git a/include/linux/lockd/lockd.h b/include/linux/lockd/lockd.h
index 6af3b05..6e8909d 100644
--- a/include/linux/lockd/lockd.h
+++ b/include/linux/lockd/lockd.h
@@ -214,10 +214,11 @@ void nlmclnt_next_cookie(struct nlm_cookie *);
/*
* 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 *);
next prev parent reply other threads:[~2008-06-30 23:00 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-06-30 22:58 [PATCH 00/16] NLM clean-ups for IPv6 support Chuck Lever
[not found] ` <20080630225011.25407.61357.stgit-ewv44WTpT0t9HhUboXbp9zCvJB+x5qRC@public.gmane.org>
2008-06-30 22:58 ` [PATCH 01/16] lockd: Pass "struct sockaddr *" to new failover-by-IP function Chuck Lever
[not found] ` <20080630225813.25407.29856.stgit-ewv44WTpT0t9HhUboXbp9zCvJB+x5qRC@public.gmane.org>
2008-07-15 20:12 ` J. Bruce Fields
2008-07-15 21:26 ` Chuck Lever
2008-06-30 22:58 ` [PATCH 02/16] lockd: address-family independent printable addresses Chuck Lever
[not found] ` <20080630225821.25407.58530.stgit-ewv44WTpT0t9HhUboXbp9zCvJB+x5qRC@public.gmane.org>
2008-07-15 20:25 ` J. Bruce Fields
2008-07-15 21:41 ` Chuck Lever
[not found] ` <76bd70e30807151441v7a23ce7ev7575a7706ab7a982-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-07-15 21:48 ` J. Bruce Fields
2008-06-30 22:58 ` [PATCH 03/16] lockd: Specify address family for source address Chuck Lever
2008-06-30 22:58 ` [PATCH 04/16] lockd: Add address family-agnostic helper for zeroing the port number Chuck Lever
2008-06-30 22:58 ` [PATCH 05/16] SUNRPC: Make svc_addr's argument a constant Chuck Lever
2008-06-30 22:58 ` [PATCH 06/16] lockd: Use sockaddr_storage + length for h_addr field Chuck Lever
2008-06-30 22:59 ` [PATCH 07/16] lockd: Use sockaddr_storage for h_saddr field Chuck Lever
2008-06-30 22:59 ` [PATCH 08/16] NSM: Use sockaddr_storage for sm_addr field Chuck Lever
2008-06-30 22:59 ` [PATCH 09/16] lockd: Teach nlm_cmp_addr() to support AF_INET6 addresses Chuck Lever
2008-06-30 22:59 ` [PATCH 10/16] lockd: Support AF_INET6 when hashing addresses in nlm_lookup_host Chuck Lever
2008-06-30 22:59 ` [PATCH 11/16] lockd: Combine __nsm_find() and nsm_find() Chuck Lever
2008-06-30 22:59 ` [PATCH 12/16] lockd: Update nsm_find() to support non-AF_INET addresses Chuck Lever
2008-06-30 22:59 ` [PATCH 13/16] lockd: Support non-AF_INET addresses in nlm_lookup_host() Chuck Lever
2008-06-30 22:59 ` Chuck Lever [this message]
2008-06-30 23:00 ` [PATCH 15/16] lockd: Adjust nlmsvc_lookup_host() to accomodate non-AF_INET Chuck Lever
2008-06-30 23:00 ` [PATCH 16/16] lockd: change nlmclnt_grant() to take a "struct sockaddr *" Chuck Lever
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20080630225957.25407.71453.stgit@ellison.1015granger.net \
--to=chuck.lever@oracle.com \
--cc=bfields@citi.umich.edu \
--cc=linux-nfs@vger.kernel.org \
--cc=trond.myklebust@netapp.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox