Whamcloud - gitweb
LU-5875 lnet: return -EEXIST if NI is not unique
[fs/lustre-release.git] / lnet / lnet / api-ni.c
index 04ccd26..ae10aa8 100644 (file)
@@ -1414,7 +1414,7 @@ static int
 lnet_startup_lndni(struct lnet_ni *ni, __s32 peer_timeout,
                   __s32 peer_cr, __s32 peer_buf_cr, __s32 credits)
 {
-       int                     rc = 0;
+       int                     rc = -EINVAL;
        int                     lnd_type;
        lnd_t                   *lnd;
        struct lnet_tx_queue    *tq;
@@ -1432,19 +1432,21 @@ lnet_startup_lndni(struct lnet_ni *ni, __s32 peer_timeout,
 
        /* Make sure this new NI is unique. */
        lnet_net_lock(LNET_LOCK_EX);
-       if (!lnet_net_unique(LNET_NIDNET(ni->ni_nid), &the_lnet.ln_nis)) {
+       rc = lnet_net_unique(LNET_NIDNET(ni->ni_nid), &the_lnet.ln_nis);
+       lnet_net_unlock(LNET_LOCK_EX);
+
+       if (!rc) {
                if (lnd_type == LOLND) {
-                       lnet_net_unlock(LNET_LOCK_EX);
                        lnet_ni_free(ni);
                        return 0;
                }
-               lnet_net_unlock(LNET_LOCK_EX);
 
                CERROR("Net %s is not unique\n",
                       libcfs_net2str(LNET_NIDNET(ni->ni_nid)));
+
+               rc = -EEXIST;
                goto failed0;
        }
-       lnet_net_unlock(LNET_LOCK_EX);
 
        LNET_MUTEX_LOCK(&the_lnet.ln_lnd_mutex);
        lnd = lnet_find_lnd_by_type(lnd_type);
@@ -1452,8 +1454,7 @@ lnet_startup_lndni(struct lnet_ni *ni, __s32 peer_timeout,
 #ifdef __KERNEL__
        if (lnd == NULL) {
                LNET_MUTEX_UNLOCK(&the_lnet.ln_lnd_mutex);
-               rc = request_module("%s",
-                                   libcfs_lnd2modname(lnd_type));
+               rc = request_module("%s", libcfs_lnd2modname(lnd_type));
                LNET_MUTEX_LOCK(&the_lnet.ln_lnd_mutex);
 
                lnd = lnet_find_lnd_by_type(lnd_type);
@@ -1467,6 +1468,7 @@ lnet_startup_lndni(struct lnet_ni *ni, __s32 peer_timeout,
                                           "compiled with kernel module "
                                           "loading support.");
 #endif
+                       rc = -EINVAL;
                        goto failed0;
                }
        }
@@ -1557,7 +1559,7 @@ lnet_startup_lndni(struct lnet_ni *ni, __s32 peer_timeout,
        if (ni->ni_peertxcredits == 0 || ni->ni_maxtxcredits == 0) {
                LCONSOLE_ERROR_MSG(0x107, "LNI %s has no %scredits\n",
                                   libcfs_lnd2str(lnd->lnd_type),
-                                  ni->ni_peertxcredits == 0 ? 
+                                  ni->ni_peertxcredits == 0 ?
                                        "" : "per-peer ");
                /* shutdown the NI since if we get here then it must've already
                 * been started
@@ -1580,7 +1582,7 @@ lnet_startup_lndni(struct lnet_ni *ni, __s32 peer_timeout,
        return 0;
 failed0:
        lnet_ni_free(ni);
-       return -EINVAL;
+       return rc;
 }
 
 static int
@@ -1739,7 +1741,7 @@ int
 LNetNIInit(lnet_pid_t requested_pid)
 {
        int                     im_a_router = 0;
-       int                     rc, rc2;
+       int                     rc;
        int                     ni_count;
        lnet_ping_info_t        *pinfo;
        lnet_handle_md_t        md_handle;
@@ -1827,10 +1829,7 @@ LNetNIInit(lnet_pid_t requested_pid)
        return 0;
 
 failed4:
-       lnet_ping_md_unlink(pinfo, &md_handle);
-       lnet_ping_info_free(pinfo);
-       rc2 = LNetEQFree(the_lnet.ln_ping_target_eq);
-       LASSERT(rc2 == 0);
+       lnet_ping_target_fini();
 failed3:
        the_lnet.ln_refcount = 0;
        lnet_acceptor_stop();