From f66b0c3b22bfcf0d7ac9383df5d87317f831a03d Mon Sep 17 00:00:00 2001 From: "Mr. NeilBrown" Date: Tue, 20 Dec 2022 12:03:32 -0500 Subject: [PATCH] LU-6142 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. Linux-commit: e67f133d02e ("staging: lustre: osc: tidy up osc_init()") Change-Id: I2a5ffb116c6d7c33a4530bab6e89a5ffe6117cea Signed-off-by: Mr. NeilBrown Signed-off-by: Greg Kroah-Hartman Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/49458 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Andreas Dilger Reviewed-by: Arshad Hussain Reviewed-by: Oleg Drokin --- lustre/osc/osc_request.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/lustre/osc/osc_request.c b/lustre/osc/osc_request.c index 194e8cd..56e8b7d 100644 --- a/lustre/osc/osc_request.c +++ b/lustre/osc/osc_request.c @@ -3891,14 +3891,9 @@ static int __init osc_init(void) if (rc) RETURN(rc); - rc = class_register_type(&osc_obd_ops, NULL, true, - LUSTRE_OSC_NAME, &osc_device_type); - if (rc) - GOTO(out_kmem, rc); - rc = register_shrinker(&osc_cache_shrinker); if (rc) - GOTO(out_type, rc); + GOTO(out_kmem, rc); /* This is obviously too much memory, only prevent overflow here */ if (osc_reqpool_mem_max >= 1 << 12 || osc_reqpool_mem_max == 0) @@ -3929,14 +3924,19 @@ static int __init osc_init(void) if (rc != 0) GOTO(out_req_pool, rc); + rc = class_register_type(&osc_obd_ops, NULL, true, + LUSTRE_OSC_NAME, &osc_device_type); + if (rc < 0) + GOTO(out_stop_grant, rc); + RETURN(rc); +out_stop_grant: + osc_stop_grant_work(); out_req_pool: ptlrpc_free_rq_pool(osc_rq_pool); out_shrinker: unregister_shrinker(&osc_cache_shrinker); -out_type: - class_unregister_type(LUSTRE_OSC_NAME); out_kmem: lu_kmem_fini(osc_caches); @@ -3945,11 +3945,11 @@ out_kmem: static void __exit osc_exit(void) { + class_unregister_type(LUSTRE_OSC_NAME); + ptlrpc_free_rq_pool(osc_rq_pool); osc_stop_grant_work(); unregister_shrinker(&osc_cache_shrinker); - class_unregister_type(LUSTRE_OSC_NAME); lu_kmem_fini(osc_caches); - ptlrpc_free_rq_pool(osc_rq_pool); } MODULE_AUTHOR("OpenSFS, Inc. "); -- 1.8.3.1