aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStanislav Kinsbursky <skinsbursky@parallels.com>2011-11-25 09:12:48 -0500
committerTrond Myklebust <Trond.Myklebust@netapp.com>2012-01-31 18:20:26 -0500
commit9222b955065dbb047b8db9eb2431979bff3ce700 (patch)
treef58888a80407c9d3e825612bc32a7e4044946699
parent820f9442e711a81749e70c40f149fc54c4ce0ca8 (diff)
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>
-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)
120 mnt = rpc_get_mount(); 120 mnt = rpc_get_mount();
121 if (IS_ERR(mnt)) 121 if (IS_ERR(mnt))
122 return PTR_ERR(mnt); 122 return PTR_ERR(mnt);
123 sunrpc_init_cache_detail(cd);
124 ret = vfs_path_lookup(mnt->mnt_root, mnt, "/cache", 0, &path); 123 ret = vfs_path_lookup(mnt->mnt_root, mnt, "/cache", 0, &path);
125 if (ret) 124 if (ret)
126 goto err; 125 goto err;
@@ -129,7 +128,6 @@ int nfs_cache_register(struct cache_detail *cd)
129 if (!ret) 128 if (!ret)
130 return ret; 129 return ret;
131err: 130err:
132 sunrpc_destroy_cache_detail(cd);
133 rpc_put_mount(); 131 rpc_put_mount();
134 return ret; 132 return ret;
135} 133}
@@ -141,3 +139,12 @@ void nfs_cache_unregister(struct cache_detail *cd)
141 rpc_put_mount(); 139 rpc_put_mount();
142} 140}
143 141
142void nfs_cache_init(struct cache_detail *cd)
143{
144 sunrpc_init_cache_detail(cd);
145}
146
147void nfs_cache_destroy(struct cache_detail *cd)
148{
149 sunrpc_destroy_cache_detail(cd);
150}
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);
23extern void nfs_cache_defer_req_put(struct nfs_cache_defer_req *dreq); 23extern void nfs_cache_defer_req_put(struct nfs_cache_defer_req *dreq);
24extern int nfs_cache_wait_for_upcall(struct nfs_cache_defer_req *dreq); 24extern int nfs_cache_wait_for_upcall(struct nfs_cache_defer_req *dreq);
25 25
26extern void nfs_cache_init(struct cache_detail *cd);
27extern void nfs_cache_destroy(struct cache_detail *cd);
26extern int nfs_cache_register(struct cache_detail *cd); 28extern int nfs_cache_register(struct cache_detail *cd);
27extern void nfs_cache_unregister(struct cache_detail *cd); 29extern 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,
361 361
362int nfs_dns_resolver_init(void) 362int nfs_dns_resolver_init(void)
363{ 363{
364 return nfs_cache_register(&nfs_dns_resolve); 364 int err;
365
366 nfs_cache_init(&nfs_dns_resolve);
367 err = nfs_cache_register(&nfs_dns_resolve);
368 if (err) {
369 nfs_cache_destroy(&nfs_dns_resolve);
370 return err;
371 }
372 return 0;
365} 373}
366 374
367void nfs_dns_resolver_destroy(void) 375void nfs_dns_resolver_destroy(void)
368{ 376{
369 nfs_cache_unregister(&nfs_dns_resolve); 377 nfs_cache_unregister(&nfs_dns_resolve);
378 nfs_cache_destroy(&nfs_dns_resolve);
370} 379}
371 380
372#endif 381#endif