diff options
Diffstat (limited to 'fs/nfs/dns_resolve.c')
-rw-r--r-- | fs/nfs/dns_resolve.c | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/fs/nfs/dns_resolve.c b/fs/nfs/dns_resolve.c index 76fd235d0024..a6e711ad130f 100644 --- a/fs/nfs/dns_resolve.c +++ b/fs/nfs/dns_resolve.c | |||
@@ -6,6 +6,29 @@ | |||
6 | * Resolves DNS hostnames into valid ip addresses | 6 | * Resolves DNS hostnames into valid ip addresses |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #ifdef CONFIG_NFS_USE_KERNEL_DNS | ||
10 | |||
11 | #include <linux/sunrpc/clnt.h> | ||
12 | #include <linux/dns_resolver.h> | ||
13 | |||
14 | ssize_t nfs_dns_resolve_name(char *name, size_t namelen, | ||
15 | struct sockaddr *sa, size_t salen) | ||
16 | { | ||
17 | ssize_t ret; | ||
18 | char *ip_addr = NULL; | ||
19 | int ip_len; | ||
20 | |||
21 | ip_len = dns_query(NULL, name, namelen, NULL, &ip_addr, NULL); | ||
22 | if (ip_len > 0) | ||
23 | ret = rpc_pton(ip_addr, ip_len, sa, salen); | ||
24 | else | ||
25 | ret = -ESRCH; | ||
26 | kfree(ip_addr); | ||
27 | return ret; | ||
28 | } | ||
29 | |||
30 | #else | ||
31 | |||
9 | #include <linux/hash.h> | 32 | #include <linux/hash.h> |
10 | #include <linux/string.h> | 33 | #include <linux/string.h> |
11 | #include <linux/kmod.h> | 34 | #include <linux/kmod.h> |
@@ -144,7 +167,7 @@ static int nfs_dns_show(struct seq_file *m, struct cache_detail *cd, | |||
144 | return 0; | 167 | return 0; |
145 | } | 168 | } |
146 | item = container_of(h, struct nfs_dns_ent, h); | 169 | item = container_of(h, struct nfs_dns_ent, h); |
147 | ttl = (long)item->h.expiry_time - (long)get_seconds(); | 170 | ttl = item->h.expiry_time - seconds_since_boot(); |
148 | if (ttl < 0) | 171 | if (ttl < 0) |
149 | ttl = 0; | 172 | ttl = 0; |
150 | 173 | ||
@@ -216,7 +239,7 @@ static int nfs_dns_parse(struct cache_detail *cd, char *buf, int buflen) | |||
216 | ttl = get_expiry(&buf); | 239 | ttl = get_expiry(&buf); |
217 | if (ttl == 0) | 240 | if (ttl == 0) |
218 | goto out; | 241 | goto out; |
219 | key.h.expiry_time = ttl + get_seconds(); | 242 | key.h.expiry_time = ttl + seconds_since_boot(); |
220 | 243 | ||
221 | ret = -ENOMEM; | 244 | ret = -ENOMEM; |
222 | item = nfs_dns_lookup(cd, &key); | 245 | item = nfs_dns_lookup(cd, &key); |
@@ -278,7 +301,7 @@ static int do_cache_lookup_nowait(struct cache_detail *cd, | |||
278 | goto out_err; | 301 | goto out_err; |
279 | ret = -ETIMEDOUT; | 302 | ret = -ETIMEDOUT; |
280 | if (!test_bit(CACHE_VALID, &(*item)->h.flags) | 303 | if (!test_bit(CACHE_VALID, &(*item)->h.flags) |
281 | || (*item)->h.expiry_time < get_seconds() | 304 | || (*item)->h.expiry_time < seconds_since_boot() |
282 | || cd->flush_time > (*item)->h.last_refresh) | 305 | || cd->flush_time > (*item)->h.last_refresh) |
283 | goto out_put; | 306 | goto out_put; |
284 | ret = -ENOENT; | 307 | ret = -ENOENT; |
@@ -346,3 +369,4 @@ void nfs_dns_resolver_destroy(void) | |||
346 | nfs_cache_unregister(&nfs_dns_resolve); | 369 | nfs_cache_unregister(&nfs_dns_resolve); |
347 | } | 370 | } |
348 | 371 | ||
372 | #endif | ||