提交 342827d7 编写于 作者: A Al Viro

ocfs2: fix leaks on failure exits in module_init

Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
上级 0794f569
...@@ -1624,21 +1624,17 @@ static int __init ocfs2_init(void) ...@@ -1624,21 +1624,17 @@ static int __init ocfs2_init(void)
init_waitqueue_head(&ocfs2__ioend_wq[i]); init_waitqueue_head(&ocfs2__ioend_wq[i]);
status = init_ocfs2_uptodate_cache(); status = init_ocfs2_uptodate_cache();
if (status < 0) { if (status < 0)
mlog_errno(status); goto out1;
goto leave;
}
status = ocfs2_initialize_mem_caches(); status = ocfs2_initialize_mem_caches();
if (status < 0) { if (status < 0)
mlog_errno(status); goto out2;
goto leave;
}
ocfs2_wq = create_singlethread_workqueue("ocfs2_wq"); ocfs2_wq = create_singlethread_workqueue("ocfs2_wq");
if (!ocfs2_wq) { if (!ocfs2_wq) {
status = -ENOMEM; status = -ENOMEM;
goto leave; goto out3;
} }
ocfs2_debugfs_root = debugfs_create_dir("ocfs2", NULL); ocfs2_debugfs_root = debugfs_create_dir("ocfs2", NULL);
...@@ -1650,17 +1646,23 @@ static int __init ocfs2_init(void) ...@@ -1650,17 +1646,23 @@ static int __init ocfs2_init(void)
ocfs2_set_locking_protocol(); ocfs2_set_locking_protocol();
status = register_quota_format(&ocfs2_quota_format); status = register_quota_format(&ocfs2_quota_format);
leave: if (status < 0)
if (status < 0) { goto out4;
ocfs2_free_mem_caches(); status = register_filesystem(&ocfs2_fs_type);
exit_ocfs2_uptodate_cache(); if (!status)
mlog_errno(status); return 0;
}
if (status >= 0) { unregister_quota_format(&ocfs2_quota_format);
return register_filesystem(&ocfs2_fs_type); out4:
} else destroy_workqueue(ocfs2_wq);
return -1; 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) static void __exit ocfs2_exit(void)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册