summaryrefslogtreecommitdiff
path: root/fs/nfs
diff options
context:
space:
mode:
authorStanislav Kinsbursky <skinsbursky@parallels.com>2011-11-25 18:12:48 +0400
committerTrond Myklebust <Trond.Myklebust@netapp.com>2012-02-01 03:20:26 +0400
commit9222b955065dbb047b8db9eb2431979bff3ce700 (patch)
treef58888a80407c9d3e825612bc32a7e4044946699 /fs/nfs
parent820f9442e711a81749e70c40f149fc54c4ce0ca8 (diff)
downloadlinux-9222b955065dbb047b8db9eb2431979bff3ce700.tar.xz
NFS: split cache creation and PipeFS registration
This precursor patch splits NFS cache creation and PipeFS registartion. It's required for latter split of NFS DNS resolver cache creation per network namespace context and PipeFS registration/unregistration on MOUNT/UMOUNT events. Signed-off-by: Stanislav Kinsbursky <skinsbursky@parallels.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfs')
-rw-r--r--fs/nfs/cache_lib.c11
-rw-r--r--fs/nfs/cache_lib.h2
-rw-r--r--fs/nfs/dns_resolve.c11
3 files changed, 21 insertions, 3 deletions
diff --git a/fs/nfs/cache_lib.c b/fs/nfs/cache_lib.c
index d62a8951cb12..9d79a2eaab27 100644
--- a/fs/nfs/cache_lib.c
+++ b/fs/nfs/cache_lib.c
@@ -120,7 +120,6 @@ int nfs_cache_register(struct cache_detail *cd)
mnt = rpc_get_mount();
if (IS_ERR(mnt))
return PTR_ERR(mnt);
- sunrpc_init_cache_detail(cd);
ret = vfs_path_lookup(mnt->mnt_root, mnt, "/cache", 0, &path);
if (ret)
goto err;
@@ -129,7 +128,6 @@ int nfs_cache_register(struct cache_detail *cd)
if (!ret)
return ret;
err:
- sunrpc_destroy_cache_detail(cd);
rpc_put_mount();
return ret;
}
@@ -141,3 +139,12 @@ void nfs_cache_unregister(struct cache_detail *cd)
rpc_put_mount();
}
+void nfs_cache_init(struct cache_detail *cd)
+{
+ sunrpc_init_cache_detail(cd);
+}
+
+void nfs_cache_destroy(struct cache_detail *cd)
+{
+ sunrpc_destroy_cache_detail(cd);
+}
diff --git a/fs/nfs/cache_lib.h b/fs/nfs/cache_lib.h
index 7cf6cafcc007..815dd6651c9f 100644
--- a/fs/nfs/cache_lib.h
+++ b/fs/nfs/cache_lib.h
@@ -23,5 +23,7 @@ extern struct nfs_cache_defer_req *nfs_cache_defer_req_alloc(void);
extern void nfs_cache_defer_req_put(struct nfs_cache_defer_req *dreq);
extern int nfs_cache_wait_for_upcall(struct nfs_cache_defer_req *dreq);
+extern void nfs_cache_init(struct cache_detail *cd);
+extern void nfs_cache_destroy(struct cache_detail *cd);
extern int nfs_cache_register(struct cache_detail *cd);
extern void nfs_cache_unregister(struct cache_detail *cd);
diff --git a/fs/nfs/dns_resolve.c b/fs/nfs/dns_resolve.c
index a6e711ad130f..619dea6b5ccf 100644
--- a/fs/nfs/dns_resolve.c
+++ b/fs/nfs/dns_resolve.c
@@ -361,12 +361,21 @@ ssize_t nfs_dns_resolve_name(char *name, size_t namelen,
int nfs_dns_resolver_init(void)
{
- return nfs_cache_register(&nfs_dns_resolve);
+ int err;
+
+ nfs_cache_init(&nfs_dns_resolve);
+ err = nfs_cache_register(&nfs_dns_resolve);
+ if (err) {
+ nfs_cache_destroy(&nfs_dns_resolve);
+ return err;
+ }
+ return 0;
}
void nfs_dns_resolver_destroy(void)
{
nfs_cache_unregister(&nfs_dns_resolve);
+ nfs_cache_destroy(&nfs_dns_resolve);
}
#endif