Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=5bd5f5812bfa753218e02cb773e06ede48055798
Commit:     5bd5f5812bfa753218e02cb773e06ede48055798
Parent:     cd123012d99fde4759500fee611e724e4f3016e3
Author:     Akinobu Mita <[EMAIL PROTECTED]>
AuthorDate: Wed May 9 02:34:51 2007 -0700
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Wed May 9 12:30:54 2007 -0700

    sunrpc: fix error path in module_init
    
    register_rpc_pipefs() needs to clean up rpc_inode_cache
    by kmem_cache_destroy() on register_filesystem() failure.
    
    init_sunrpc() needs to unregister rpc_pipe_fs by unregister_rpc_pipefs()
    when rpc_init_mempool() returns error.
    
    Signed-off-by: Akinobu Mita <[EMAIL PROTECTED]>
    Cc: Neil Brown <[EMAIL PROTECTED]>
    Cc: Trond Myklebust <[EMAIL PROTECTED]>
    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
---
 net/sunrpc/rpc_pipe.c    |    9 ++++++++-
 net/sunrpc/sunrpc_syms.c |    6 ++++--
 2 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/net/sunrpc/rpc_pipe.c b/net/sunrpc/rpc_pipe.c
index ad39b47..a2f1893 100644
--- a/net/sunrpc/rpc_pipe.c
+++ b/net/sunrpc/rpc_pipe.c
@@ -845,6 +845,8 @@ init_once(void * foo, struct kmem_cache * cachep, unsigned 
long flags)
 
 int register_rpc_pipefs(void)
 {
+       int err;
+
        rpc_inode_cachep = kmem_cache_create("rpc_inode_cache",
                                sizeof(struct rpc_inode),
                                0, (SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT|
@@ -852,7 +854,12 @@ int register_rpc_pipefs(void)
                                init_once, NULL);
        if (!rpc_inode_cachep)
                return -ENOMEM;
-       register_filesystem(&rpc_pipe_fs_type);
+       err = register_filesystem(&rpc_pipe_fs_type);
+       if (err) {
+               kmem_cache_destroy(rpc_inode_cachep);
+               return err;
+       }
+
        return 0;
 }
 
diff --git a/net/sunrpc/sunrpc_syms.c b/net/sunrpc/sunrpc_syms.c
index 43ecf62..0d35bc7 100644
--- a/net/sunrpc/sunrpc_syms.c
+++ b/net/sunrpc/sunrpc_syms.c
@@ -146,9 +146,11 @@ init_sunrpc(void)
        int err = register_rpc_pipefs();
        if (err)
                goto out;
-       err = rpc_init_mempool() != 0;
-       if (err)
+       err = rpc_init_mempool();
+       if (err) {
+               unregister_rpc_pipefs();
                goto out;
+       }
 #ifdef RPC_DEBUG
        rpc_register_sysctl();
 #endif
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to