ocfs2: fix leaks on failure exits in module_init
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
Родитель
0794f569ec
Коммит
342827d7d1
|
@ -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);
|
||||
|
@ -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)
|
||||
|
|
Загрузка…
Ссылка в новой задаче