From a1282a0d8a5361932c25c37172d360679fbd8232 Mon Sep 17 00:00:00 2001 From: Mr NeilBrown Date: Wed, 6 Nov 2019 15:45:27 +1100 Subject: [PATCH] LU-9679 lnet: always check return of try_module_get() try_module_get() can fail, so the return value should be checked. If we *know* that we already hold a reference, __module_get() should be used instead. Test-Parameters: trivial Signed-off-by: Mr NeilBrown Change-Id: Id526f9ae3829a50fe7df7069230804322cd4558e Reviewed-on: https://review.whamcloud.com/36854 Tested-by: jenkins Tested-by: Maloo Reviewed-by: James Simmons Reviewed-by: Chris Horn Reviewed-by: Oleg Drokin --- lnet/klnds/gnilnd/gnilnd.c | 3 ++- lnet/klnds/o2iblnd/o2iblnd.c | 4 +++- lnet/klnds/socklnd/socklnd.c | 3 ++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/lnet/klnds/gnilnd/gnilnd.c b/lnet/klnds/gnilnd/gnilnd.c index d1a73a7..90ee025 100644 --- a/lnet/klnds/gnilnd/gnilnd.c +++ b/lnet/klnds/gnilnd/gnilnd.c @@ -2304,7 +2304,8 @@ int kgnilnd_base_startup(void) /* OK to call kgnilnd_api_shutdown() to cleanup now */ kgnilnd_data.kgn_init = GNILND_INIT_DATA; - try_module_get(THIS_MODULE); + if (!try_module_get(THIS_MODULE)) + GOTO(failed, rc = -ENOENT); rwlock_init(&kgnilnd_data.kgn_peer_conn_lock); diff --git a/lnet/klnds/o2iblnd/o2iblnd.c b/lnet/klnds/o2iblnd/o2iblnd.c index e6b517b..3437f30 100644 --- a/lnet/klnds/o2iblnd/o2iblnd.c +++ b/lnet/klnds/o2iblnd/o2iblnd.c @@ -3031,7 +3031,9 @@ kiblnd_base_startup(struct net *ns) LASSERT(kiblnd_data.kib_init == IBLND_INIT_NOTHING); - try_module_get(THIS_MODULE); + if (!try_module_get(THIS_MODULE)) + goto failed; + memset(&kiblnd_data, 0, sizeof(kiblnd_data)); /* zero pointers, flags etc */ rwlock_init(&kiblnd_data.kib_global_lock); diff --git a/lnet/klnds/socklnd/socklnd.c b/lnet/klnds/socklnd/socklnd.c index ae0e658..18c7e6a 100644 --- a/lnet/klnds/socklnd/socklnd.c +++ b/lnet/klnds/socklnd/socklnd.c @@ -2365,7 +2365,8 @@ ksocknal_base_startup(void) /* flag lists/ptrs/locks initialised */ ksocknal_data.ksnd_init = SOCKNAL_INIT_DATA; - try_module_get(THIS_MODULE); + if (!try_module_get(THIS_MODULE)) + goto failed; /* Create a scheduler block per available CPT */ ksocknal_data.ksnd_schedulers = cfs_percpt_alloc(lnet_cpt_table(), -- 1.8.3.1