diff options
author | Stanislav Kinsbursky <skinsbursky@parallels.com> | 2011-11-25 09:13:04 -0500 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2012-01-31 18:20:26 -0500 |
commit | 1b340d0118da1d7c60c664f17d7c8fce2bb1cd9d (patch) | |
tree | a66a9626f8fca21bd42d13a3b4270b168e2186fc /fs/nfs/nfs4namespace.c | |
parent | 5c1cacb175185ed925d7dc13ac7e0653e7a633cd (diff) |
NFS: DNS resolver cache per network namespace context introduced
This patch implements DNS resolver cache creation and registration for each
alive network namespace context.
This was done by registering NFS per-net operations, responsible for DNS cache
allocation/register and unregister/destructioning instead of initialization and
destruction of static "nfs_dns_resolve" cache detail (this one was removed).
Pointer to network dns resolver cache is stored in new per-net "nfs_net"
structure.
This patch also changes nfs_dns_resolve_name() function prototype (and it's
calls) by adding network pointer parameter, which is used to get proper DNS
resolver cache pointer for do_cache_lookup_wait() call.
Note: empty nfs_dns_resolver_init() and nfs_dns_resolver_destroy() functions
will be used in next patch in the series.
Signed-off-by: Stanislav Kinsbursky <skinsbursky@parallels.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfs/nfs4namespace.c')
-rw-r--r-- | fs/nfs/nfs4namespace.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/fs/nfs/nfs4namespace.c b/fs/nfs/nfs4namespace.c index bb80c49b6533..919a36935924 100644 --- a/fs/nfs/nfs4namespace.c +++ b/fs/nfs/nfs4namespace.c | |||
@@ -94,13 +94,14 @@ static int nfs4_validate_fspath(struct dentry *dentry, | |||
94 | } | 94 | } |
95 | 95 | ||
96 | static size_t nfs_parse_server_name(char *string, size_t len, | 96 | static size_t nfs_parse_server_name(char *string, size_t len, |
97 | struct sockaddr *sa, size_t salen) | 97 | struct sockaddr *sa, size_t salen, struct nfs_server *server) |
98 | { | 98 | { |
99 | ssize_t ret; | 99 | ssize_t ret; |
100 | 100 | ||
101 | ret = rpc_pton(string, len, sa, salen); | 101 | ret = rpc_pton(string, len, sa, salen); |
102 | if (ret == 0) { | 102 | if (ret == 0) { |
103 | ret = nfs_dns_resolve_name(string, len, sa, salen); | 103 | ret = nfs_dns_resolve_name(server->client->cl_xprt->xprt_net, |
104 | string, len, sa, salen); | ||
104 | if (ret < 0) | 105 | if (ret < 0) |
105 | ret = 0; | 106 | ret = 0; |
106 | } | 107 | } |
@@ -137,7 +138,8 @@ static struct vfsmount *try_location(struct nfs_clone_mount *mountdata, | |||
137 | continue; | 138 | continue; |
138 | 139 | ||
139 | mountdata->addrlen = nfs_parse_server_name(buf->data, buf->len, | 140 | mountdata->addrlen = nfs_parse_server_name(buf->data, buf->len, |
140 | mountdata->addr, addr_bufsize); | 141 | mountdata->addr, addr_bufsize, |
142 | NFS_SB(mountdata->sb)); | ||
141 | if (mountdata->addrlen == 0) | 143 | if (mountdata->addrlen == 0) |
142 | continue; | 144 | continue; |
143 | 145 | ||