]> git.karo-electronics.de Git - mv-sheeva.git/commitdiff
NFS: split cache creation and PipeFS registration
authorStanislav Kinsbursky <skinsbursky@parallels.com>
Fri, 25 Nov 2011 14:12:48 +0000 (17:12 +0300)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Tue, 31 Jan 2012 23:20:26 +0000 (18:20 -0500)
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>
fs/nfs/cache_lib.c
fs/nfs/cache_lib.h
fs/nfs/dns_resolve.c

index d62a8951cb128cfe5e7c64831d5711028bcfd214..9d79a2eaab276a0159b06cc67fd0dba078ef782b 100644 (file)
@@ -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);
+}
index 7cf6cafcc007d8a5350aee6eae30647dceaab802..815dd6651c9f9b144ffa6d509775dcec48c32ec6 100644 (file)
@@ -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);
index a6e711ad130f9fdb456ad2a09b056214815af4f5..619dea6b5ccf9874fc73664bfd2d1abe9b95f75d 100644 (file)
@@ -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