From 7d63c00e24d77d931642ce6cf5e8ff4cc2cad255 Mon Sep 17 00:00:00 2001 From: Amir Shehata Date: Fri, 12 Dec 2014 14:43:03 -0800 Subject: [PATCH] LU-5875 lnet: return -EEXIST if NI is not unique Return -EEXIST and not -EINVAL when trying to add a network interface which is not unique. Some minor cleanup in api-ni.c Signed-off-by: Amir Shehata Change-Id: Ic74a768c0e7688ba0e35740e2ca2ac9ae4f999ea Reviewed-on: http://review.whamcloud.com/13056 Tested-by: Jenkins Reviewed-by: Isaac Huang Reviewed-by: James Simmons Tested-by: Maloo Reviewed-by: Oleg Drokin --- lnet/lnet/api-ni.c | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/lnet/lnet/api-ni.c b/lnet/lnet/api-ni.c index 04ccd26..ae10aa8 100644 --- a/lnet/lnet/api-ni.c +++ b/lnet/lnet/api-ni.c @@ -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(); -- 1.8.3.1