staging: lustre: osc: tidy up osc_init()

A module_init() function that registers the services
of the module should do that last, after all other
initialization has succeeded.
This patch moves the class_register_type() call to the
end and ensures everything else that might have been
set up, is cleaned up on error.

Signed-off-by: NeilBrown <neilb@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
NeilBrown 2018-05-21 14:35:12 +10:00 committed by Greg Kroah-Hartman
parent 03f17b5d40
commit e67f133d02

View File

@ -2837,19 +2837,14 @@ static int __init osc_init(void)
lprocfs_osc_init_vars(&lvars);
rc = class_register_type(&osc_obd_ops, NULL,
LUSTRE_OSC_NAME, &osc_device_type);
if (rc)
goto out_kmem;
rc = register_shrinker(&osc_cache_shrinker);
if (rc)
goto out_type;
goto err;
/* This is obviously too much memory, only prevent overflow here */
if (osc_reqpool_mem_max >= 1 << 12 || osc_reqpool_mem_max == 0) {
rc = -EINVAL;
goto out_type;
goto err;
}
reqpool_size = osc_reqpool_mem_max << 20;
@ -2870,14 +2865,22 @@ static int __init osc_init(void)
osc_rq_pool = ptlrpc_init_rq_pool(0, OST_MAXREQSIZE,
ptlrpc_add_rqs_to_pool);
if (osc_rq_pool)
return 0;
rc = -ENOMEM;
out_type:
class_unregister_type(LUSTRE_OSC_NAME);
out_kmem:
if (!osc_rq_pool)
goto err;
rc = class_register_type(&osc_obd_ops, NULL,
LUSTRE_OSC_NAME, &osc_device_type);
if (rc)
goto err;
return rc;
err:
if (osc_rq_pool)
ptlrpc_free_rq_pool(osc_rq_pool);
unregister_shrinker(&osc_cache_shrinker);
lu_kmem_fini(osc_caches);
return rc;
}