From: Mr NeilBrown Date: Wed, 6 Nov 2019 04:45:27 +0000 (+1100) Subject: LU-9679 lnet: always check return of try_module_get() X-Git-Tag: 2.13.51~20 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=refs%2Fchanges%2F54%2F36854%2F6;p=fs%2Flustre-release.git 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 --- 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(),