Re: [PATCH 1/3] NFS: Use kernel DNS resolver [ver #2]
From: Steve French
Date: Wed Aug 11 2010 - 12:01:28 EST
Patches 1 - 3 of this series now in cifs-2.6.git
On Wed, Aug 11, 2010 at 3:37 AM, David Howells <dhowells@xxxxxxxxxx> wrote:
> From: Bryan Schumaker <bjschuma@xxxxxxxxxx>
>
> Use the kernel DNS resolver to translate hostnames to IP addresses. Create a
> new config option to choose between the legacy DNS resolver and the new
> resolver.
>
> Signed-off-by: Bryan Schumaker <bjschuma@xxxxxxxxxx>
> Acked-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx>
> Signed-off-by: David Howells <dhowells@xxxxxxxxxx>
> ---
>
> fs/nfs/Kconfig | 16 ++++++++++++++++
> fs/nfs/dns_resolve.c | 24 ++++++++++++++++++++++++
> fs/nfs/dns_resolve.h | 12 ++++++++++++
> 3 files changed, 52 insertions(+), 0 deletions(-)
>
> diff --git a/fs/nfs/Kconfig b/fs/nfs/Kconfig
> index cc1bb33..c5bbdca 100644
> --- a/fs/nfs/Kconfig
> +++ b/fs/nfs/Kconfig
> @@ -100,3 +100,19 @@ config NFS_FSCACHE
> help
> Say Y here if you want NFS data to be cached locally on disc through
> the general filesystem cache manager
> +
> +config NFS_USE_LEGACY_DNS
> + bool "Use the legacy NFS DNS resolver"
> + depends on NFS_V4
> + help
> + The kernel now provides a method for translating a host name into an
> + IP address. Select Y here if you would rather use your own DNS
> + resolver script.
> +
> + If unsure, say N
> +
> +config NFS_USE_KERNEL_DNS
> + bool
> + depends on NFS_V4 && !NFS_USE_LEGACY_DNS
> + select DNS_RESOLVER
> + default y
> diff --git a/fs/nfs/dns_resolve.c b/fs/nfs/dns_resolve.c
> index 76fd235..dba50a5 100644
> --- a/fs/nfs/dns_resolve.c
> +++ b/fs/nfs/dns_resolve.c
> @@ -6,6 +6,29 @@
> * Resolves DNS hostnames into valid ip addresses
> */
>
> +#ifdef CONFIG_NFS_USE_KERNEL_DNS
> +
> +#include <linux/sunrpc/clnt.h>
> +#include <linux/dns_resolver.h>
> +
> +ssize_t nfs_dns_resolve_name(char *name, size_t namelen,
> + struct sockaddr *sa, size_t salen)
> +{
> + ssize_t ret;
> + char *ip_addr = NULL;
> + int ip_len;
> +
> + ip_len = dns_query(NULL, name, namelen, NULL, &ip_addr, NULL);
> + if (ip_len > 0)
> + ret = rpc_pton(ip_addr, ip_len, sa, salen);
> + else
> + ret = -ESRCH;
> + kfree(ip_addr);
> + return ret;
> +}
> +
> +#else
> +
> #include <linux/hash.h>
> #include <linux/string.h>
> #include <linux/kmod.h>
> @@ -346,3 +369,4 @@ void nfs_dns_resolver_destroy(void)
> nfs_cache_unregister(&nfs_dns_resolve);
> }
>
> +#endif
> diff --git a/fs/nfs/dns_resolve.h b/fs/nfs/dns_resolve.h
> index a3f0938..199bb55 100644
> --- a/fs/nfs/dns_resolve.h
> +++ b/fs/nfs/dns_resolve.h
> @@ -6,8 +6,20 @@
>
> #define NFS_DNS_HOSTNAME_MAXLEN (128)
>
> +
> +#ifdef CONFIG_NFS_USE_KERNEL_DNS
> +static inline int nfs_dns_resolver_init(void)
> +{
> + return 0;
> +}
> +
> +static inline void nfs_dns_resolver_destroy(void)
> +{}
> +#else
> extern int nfs_dns_resolver_init(void);
> extern void nfs_dns_resolver_destroy(void);
> +#endif
> +
> extern ssize_t nfs_dns_resolve_name(char *name, size_t namelen,
> struct sockaddr *sa, size_t salen);
>
>
>
--
Thanks,
Steve
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/