Skip to content

Commit

Permalink
ocfs2: fix leaks on failure exits in module_init
Browse files Browse the repository at this point in the history
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
  • Loading branch information
Al Viro committed Mar 21, 2012
1 parent 0794f56 commit 342827d
Showing 1 changed file with 21 additions and 19 deletions.
40 changes: 21 additions & 19 deletions fs/ocfs2/super.c
Original file line number Diff line number Diff line change
Expand Up @@ -1624,21 +1624,17 @@ static int __init ocfs2_init(void)
init_waitqueue_head(&ocfs2__ioend_wq[i]);

status = init_ocfs2_uptodate_cache();
if (status < 0) {
mlog_errno(status);
goto leave;
}
if (status < 0)
goto out1;

status = ocfs2_initialize_mem_caches();
if (status < 0) {
mlog_errno(status);
goto leave;
}
if (status < 0)
goto out2;

ocfs2_wq = create_singlethread_workqueue("ocfs2_wq");
if (!ocfs2_wq) {
status = -ENOMEM;
goto leave;
goto out3;
}

ocfs2_debugfs_root = debugfs_create_dir("ocfs2", NULL);
Expand All @@ -1650,17 +1646,23 @@ static int __init ocfs2_init(void)
ocfs2_set_locking_protocol();

status = register_quota_format(&ocfs2_quota_format);
leave:
if (status < 0) {
ocfs2_free_mem_caches();
exit_ocfs2_uptodate_cache();
mlog_errno(status);
}
if (status < 0)
goto out4;
status = register_filesystem(&ocfs2_fs_type);
if (!status)
return 0;

if (status >= 0) {
return register_filesystem(&ocfs2_fs_type);
} else
return -1;
unregister_quota_format(&ocfs2_quota_format);
out4:
destroy_workqueue(ocfs2_wq);
debugfs_remove(ocfs2_debugfs_root);
out3:
ocfs2_free_mem_caches();
out2:
exit_ocfs2_uptodate_cache();
out1:
mlog_errno(status);
return status;
}

static void __exit ocfs2_exit(void)
Expand Down

0 comments on commit 342827d

Please sign in to comment.