Hi all, After merging the cifs tree, today's linux-next build (powerpc ppc64_defconfig) failed like this: net/dns_resolver/dns_key.c: In function 'dns_resolver_instantiate': net/dns_resolver/dns_key.c:70: error: dereferencing pointer to incomplete type net/dns_resolver/dns_key.c:70: error: dereferencing pointer to incomplete type net/dns_resolver/dns_key.c:99: error: dereferencing pointer to incomplete type net/dns_resolver/dns_key.c:128: error: dereferencing pointer to incomplete type net/dns_resolver/dns_key.c:136: error: dereferencing pointer to incomplete type net/dns_resolver/dns_key.c:143: error: dereferencing pointer to incomplete type net/dns_resolver/dns_key.c:144: error: dereferencing pointer to incomplete type net/dns_resolver/dns_key.c:149: error: implicit declaration of function 'key_payload_reserve' net/dns_resolver/dns_key.c:162: error: dereferencing pointer to incomplete type net/dns_resolver/dns_key.c: In function 'dns_resolver_match': net/dns_resolver/dns_key.c:178: error: dereferencing pointer to incomplete type net/dns_resolver/dns_key.c: In function 'dns_resolver_describe': net/dns_resolver/dns_key.c:211: error: dereferencing pointer to incomplete type net/dns_resolver/dns_key.c:213: error: dereferencing pointer to incomplete type net/dns_resolver/dns_key.c:217: error: dereferencing pointer to incomplete type net/dns_resolver/dns_key.c: At top level: net/dns_resolver/dns_key.c:220: error: variable 'key_type_dns_resolver' has initializer but incomplete type net/dns_resolver/dns_key.c:221: error: unknown field 'name' specified in initializer net/dns_resolver/dns_key.c:221: warning: excess elements in struct initializer net/dns_resolver/dns_key.c:221: warning: (near initialization for 'key_type_dns_resolver') net/dns_resolver/dns_key.c:222: error: unknown field 'instantiate' specified in initializer net/dns_resolver/dns_key.c:222: warning: excess elements in struct initializer net/dns_resolver/dns_key.c:222: warning: (near initialization for ...
Are you sure that this is a valid config file? CONFIG_KEYS should be set if CONFIG_DNS_RESOLVER is set? key.h looks like it is included in all arch in this path net/dns_resolver/dns_key.c includes include/keys/dns_resolver-type.h which includes include/linux/key-type.h which includes include/linux/key.h the line 258 "key_instantiate_and_link" error could occur if "CONFIG_KEYS" is not set in .config net/dns_resolver/Kconfig config DNS_RESOLVER "depends on NET && KEYS" so ... CONFIG_KEYS should be set .... -- Thanks, Steve --
Hi Steve, It is a ppc64_defconfig. It has: # CONFIG_KEYS is not set CONFIG_DNS_RESOLVER=y CONFIG_NFS_USE_KERNEL_DNS just selects CONFIG_DNS_RESOLVER but there is no dependency on CONFIG_KEYS (select does not care about the See above. You need CONFIG_NFS_USE_KERNEL_DNS to also depend on CONFIG_KEYS ... -- Cheers, Stephen Rothwell sfr@canb.auug.org.au http://www.canb.auug.org.au/~sfr/
Hi
I updated my NFS DNS patch. The new version will set CONFIG_KEYS when CONFIG_NFS_USE_KERNEL_DNS is set.
Thanks for letting me know about this!
Bryan Schumaker
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@netapp.com>
Acked-by: Trond Myklebust <Trond.Myklebust@netapp.com>
---
Fix for KEYS dependency
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
+ select KEYS
+ 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 = ...Fixed in cifs-2.6.git -- Thanks, Steve --
Perhaps it needs to select CONFIG_KEYS instead? David --
