aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/lockd/clntlock.c5
-rw-r--r--fs/lockd/host.c32
-rw-r--r--include/linux/lockd/lockd.h9
3 files changed, 28 insertions, 18 deletions
diff --git a/fs/lockd/clntlock.c b/fs/lockd/clntlock.c
index 237224a3c420..9eaf306d15fa 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)
58 if (status < 0) 58 if (status < 0)
59 return ERR_PTR(status); 59 return ERR_PTR(status);
60 60
61 host = nlmclnt_lookup_host((struct sockaddr_in *)nlm_init->address, 61 host = nlmclnt_lookup_host(nlm_init->address, nlm_init->addrlen,
62 nlm_init->protocol, nlm_version, 62 nlm_init->protocol, nlm_version,
63 nlm_init->hostname, 63 nlm_init->hostname);
64 strlen(nlm_init->hostname));
65 if (host == NULL) { 64 if (host == NULL) {
66 lockd_down(); 65 lockd_down();
67 return ERR_PTR(-ENOLCK); 66 return ERR_PTR(-ENOLCK);
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)
264 kfree(host); 264 kfree(host);
265} 265}
266 266
267/* 267/**
268 * Find an NLM server handle in the cache. If there is none, create it. 268 * nlmclnt_lookup_host - Find an NLM host handle matching a remote server
269 * @sap: network address of server
270 * @salen: length of server address
271 * @protocol: transport protocol to use
272 * @version: NLM protocol version
273 * @hostname: '\0'-terminated hostname of server
274 *
275 * Returns an nlm_host structure that matches the passed-in
276 * [server address, transport protocol, NLM version, server hostname].
277 * If one doesn't already exist in the host cache, a new handle is
278 * created and returned.
269 */ 279 */
270struct nlm_host *nlmclnt_lookup_host(const struct sockaddr_in *sin, 280struct nlm_host *nlmclnt_lookup_host(const struct sockaddr *sap,
271 int proto, u32 version, 281 const size_t salen,
272 const char *hostname, 282 const unsigned short protocol,
273 unsigned int hostname_len) 283 const u32 version, const char *hostname)
274{ 284{
275 const struct sockaddr source = { 285 const struct sockaddr source = {
276 .sa_family = AF_UNSPEC, 286 .sa_family = AF_UNSPEC,
277 }; 287 };
278 struct nlm_lookup_host_info ni = { 288 struct nlm_lookup_host_info ni = {
279 .server = 0, 289 .server = 0,
280 .sap = (struct sockaddr *)sin, 290 .sap = sap,
281 .salen = sizeof(*sin), 291 .salen = salen,
282 .protocol = proto, 292 .protocol = protocol,
283 .version = version, 293 .version = version,
284 .hostname = hostname, 294 .hostname = hostname,
285 .hostname_len = hostname_len, 295 .hostname_len = strlen(hostname),
286 .src_sap = &source, 296 .src_sap = &source,
287 .src_len = sizeof(source), 297 .src_len = sizeof(source),
288 }; 298 };
289 299
290 dprintk("lockd: %s(host='%s', vers=%u, proto=%s)\n", __func__, 300 dprintk("lockd: %s(host='%s', vers=%u, proto=%s)\n", __func__,
291 (hostname ? hostname : "<none>"), version, 301 (hostname ? hostname : "<none>"), version,
292 (proto == IPPROTO_UDP ? "udp" : "tcp")); 302 (protocol == IPPROTO_UDP ? "udp" : "tcp"));
293 303
294 return nlm_lookup_host(&ni); 304 return nlm_lookup_host(&ni);
295} 305}
diff --git a/include/linux/lockd/lockd.h b/include/linux/lockd/lockd.h
index 973ab1d6e862..90a996d2f005 100644
--- a/include/linux/lockd/lockd.h
+++ b/include/linux/lockd/lockd.h
@@ -215,10 +215,11 @@ void nlmclnt_next_cookie(struct nlm_cookie *);
215/* 215/*
216 * Host cache 216 * Host cache
217 */ 217 */
218struct nlm_host *nlmclnt_lookup_host(const struct sockaddr_in *sin, 218struct nlm_host *nlmclnt_lookup_host(const struct sockaddr *sap,
219 int proto, u32 version, 219 const size_t salen,
220 const char *hostname, 220 const unsigned short protocol,
221 unsigned int hostname_len); 221 const u32 version,
222 const char *hostname);
222struct nlm_host *nlmsvc_lookup_host(struct svc_rqst *, const char *, 223struct nlm_host *nlmsvc_lookup_host(struct svc_rqst *, const char *,
223 unsigned int); 224 unsigned int);
224struct rpc_clnt * nlm_bind_host(struct nlm_host *); 225struct rpc_clnt * nlm_bind_host(struct nlm_host *);