sunrpc: fix error path in module_init
Subsystems (3)
PATCH 1/1 sunrpc: fix error path in module_init
This patch fixes error code paths in sunrpc.
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.
Cc Neil Brown <[email protected]>
Signed-off-by Akinobu Mita <[email protected]>
--- net/sunrpc/rpc_pipe.c | 9 ++++++++- net/sunrpc/sunrpc_syms.c | 6 ++++-- 2 files changed, 12 insertions(+), 3 deletions(-)
net/sunrpc/rpc_pipe.c +8 -1
@@ -845,6 +845,8 @@ init_once(void * foo, struct kmem_cacheint 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 ; }
net/sunrpc/sunrpc_syms.c +4 -2
@@ -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