X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lnet%2Flnet%2Fmodule.c;h=a8f39b36f9904e30fb241d8e6ef94013fff24f4e;hp=197ff25136f8956f3403d21177cd2fdd88ea620a;hb=f1a2e6107c124d010d89973cfd716fbd17b689f0;hpb=faeb94fe81e4646b3121c263521d30e0e83fa71f diff --git a/lnet/lnet/module.c b/lnet/lnet/module.c index 197ff25..a8f39b3 100644 --- a/lnet/lnet/module.c +++ b/lnet/lnet/module.c @@ -53,13 +53,21 @@ lnet_configure(void *arg) LNET_MUTEX_LOCK(&lnet_config_mutex); if (!the_lnet.ln_niinit_self) { + rc = try_module_get(THIS_MODULE); + + if (rc != 1) + goto out; + rc = LNetNIInit(LNET_PID_LUSTRE); if (rc >= 0) { the_lnet.ln_niinit_self = 1; rc = 0; + } else { + module_put(THIS_MODULE); } } +out: LNET_MUTEX_UNLOCK(&lnet_config_mutex); return rc; } @@ -67,21 +75,23 @@ lnet_configure(void *arg) static int lnet_unconfigure (void) { - int refcount; + int refcount; + + LNET_MUTEX_LOCK(&lnet_config_mutex); - LNET_MUTEX_LOCK(&lnet_config_mutex); + if (the_lnet.ln_niinit_self) { + the_lnet.ln_niinit_self = 0; + LNetNIFini(); + module_put(THIS_MODULE); + } - if (the_lnet.ln_niinit_self) { - the_lnet.ln_niinit_self = 0; - LNetNIFini(); - } + LNET_MUTEX_LOCK(&the_lnet.ln_api_mutex); + refcount = the_lnet.ln_refcount; + LNET_MUTEX_UNLOCK(&the_lnet.ln_api_mutex); - LNET_MUTEX_LOCK(&the_lnet.ln_api_mutex); - refcount = the_lnet.ln_refcount; - LNET_MUTEX_UNLOCK(&the_lnet.ln_api_mutex); + LNET_MUTEX_UNLOCK(&lnet_config_mutex); - LNET_MUTEX_UNLOCK(&lnet_config_mutex); - return (refcount == 0) ? 0 : -EBUSY; + return (refcount == 0) ? 0 : -EBUSY; } static int