From 58993799f29d12c1a60c24d9e096e38ed998ff87 Mon Sep 17 00:00:00 2001 From: Mr NeilBrown Date: Tue, 31 Aug 2021 09:54:33 -0400 Subject: [PATCH] LU-10391 lnet: change lnet_del_route() to take lnet_nid The gateway NID passed to lnet_del_route is now a struct lnet_nid. Instead of passing LNET_NID_ANY as a wildcard, we pass a NULL pointer. Test-Parameters: trivial Test-Parameters: serverversion=2.12 serverdistro=el7.9 testlist=runtests Test-Parameters: clientversion=2.12 testlist=runtests Signed-off-by: Mr NeilBrown Change-Id: I1243be20d9f40e4ac3ebc6ec5dd9bbcbae6653c3 Reviewed-on: https://review.whamcloud.com/43615 Reviewed-by: James Simmons Reviewed-by: Cyril Bordage Reviewed-by: Chris Horn Tested-by: jenkins Tested-by: Maloo Reviewed-by: Oleg Drokin --- lnet/include/lnet/lib-lnet.h | 2 +- lnet/lnet/api-ni.c | 3 ++- lnet/lnet/peer.c | 8 +++----- lnet/lnet/router.c | 32 +++++++++++++++++++------------- 4 files changed, 25 insertions(+), 20 deletions(-) diff --git a/lnet/include/lnet/lib-lnet.h b/lnet/include/lnet/lib-lnet.h index c3c55cd..3ee4e0c 100644 --- a/lnet/include/lnet/lib-lnet.h +++ b/lnet/include/lnet/lib-lnet.h @@ -616,7 +616,7 @@ void lnet_notify_locked(struct lnet_peer_ni *lp, int notifylnd, int alive, time64_t when); int lnet_add_route(__u32 net, __u32 hops, struct lnet_nid *gateway, __u32 priority, __u32 sensitivity); -int lnet_del_route(__u32 net, lnet_nid_t gw_nid); +int lnet_del_route(__u32 net, struct lnet_nid *gw_nid); void lnet_move_route(struct lnet_route *route, struct lnet_peer *lp, struct list_head *rt_list); void lnet_destroy_routes(void); diff --git a/lnet/lnet/api-ni.c b/lnet/lnet/api-ni.c index a3567c8..e2ec63f 100644 --- a/lnet/lnet/api-ni.c +++ b/lnet/lnet/api-ni.c @@ -3970,8 +3970,9 @@ LNetCtl(unsigned int cmd, void *arg) if (config->cfg_hdr.ioc_len < sizeof(*config)) return -EINVAL; + lnet_nid4_to_nid(config->cfg_nid, &nid); mutex_lock(&the_lnet.ln_api_mutex); - rc = lnet_del_route(config->cfg_net, config->cfg_nid); + rc = lnet_del_route(config->cfg_net, &nid); mutex_unlock(&the_lnet.ln_api_mutex); return rc; diff --git a/lnet/lnet/peer.c b/lnet/lnet/peer.c index 620d406..853cfe5 100644 --- a/lnet/lnet/peer.c +++ b/lnet/lnet/peer.c @@ -637,7 +637,7 @@ lnet_peer_table_del_rtrs_locked(struct lnet_net *net, { struct lnet_peer_ni *lp; struct lnet_peer_ni *tmp; - lnet_nid_t gw_nid; + struct lnet_nid gw_nid; int i; for (i = 0; i < LNET_PEER_HASH_SIZE; i++) { @@ -649,12 +649,10 @@ lnet_peer_table_del_rtrs_locked(struct lnet_net *net, if (!lnet_isrouter(lp)) continue; - /* FIXME handle large-addr nid */ - gw_nid = lnet_nid_to_nid4( - &lp->lpni_peer_net->lpn_peer->lp_primary_nid); + gw_nid = lp->lpni_peer_net->lpn_peer->lp_primary_nid; lnet_net_unlock(LNET_LOCK_EX); - lnet_del_route(LNET_NET_ANY, gw_nid); + lnet_del_route(LNET_NET_ANY, &gw_nid); lnet_net_lock(LNET_LOCK_EX); } } diff --git a/lnet/lnet/router.c b/lnet/lnet/router.c index 52a5502..c7a160b 100644 --- a/lnet/lnet/router.c +++ b/lnet/lnet/router.c @@ -120,7 +120,8 @@ MODULE_PARM_DESC(router_sensitivity_percentage, static void lnet_add_route_to_rnet(struct lnet_remotenet *rnet, struct lnet_route *route); -static void lnet_del_route_from_rnet(lnet_nid_t gw_nid, struct list_head *route_list, +static void lnet_del_route_from_rnet(struct lnet_nid *gw_nid, + struct list_head *route_list, struct list_head *zombies); static int @@ -181,7 +182,7 @@ lnet_move_route(struct lnet_route *route, struct lnet_peer *lp, * lr_nid can be a constituent NID of the peer */ lnet_del_route_from_rnet( - lnet_nid_to_nid4(&route->lr_gateway->lp_primary_nid), + &route->lr_gateway->lp_primary_nid, &rnet->lrn_routes, l); if (lp) { @@ -813,7 +814,8 @@ lnet_add_route(__u32 net, __u32 hops, struct lnet_nid *gateway, } void -lnet_del_route_from_rnet(lnet_nid_t gw_nid, struct list_head *route_list, +lnet_del_route_from_rnet(struct lnet_nid *gw_nid, + struct list_head *route_list, struct list_head *zombies) { struct lnet_peer *gateway; @@ -822,8 +824,7 @@ lnet_del_route_from_rnet(lnet_nid_t gw_nid, struct list_head *route_list, list_for_each_entry_safe(route, tmp, route_list, lr_list) { gateway = route->lr_gateway; - if (gw_nid != LNET_NID_ANY && - gw_nid != lnet_nid_to_nid4(&gateway->lp_primary_nid)) + if (gw_nid && !nid_same(gw_nid, &gateway->lp_primary_nid)) continue; /* @@ -843,7 +844,7 @@ lnet_del_route_from_rnet(lnet_nid_t gw_nid, struct list_head *route_list, } int -lnet_del_route(__u32 net, lnet_nid_t gw_nid) +lnet_del_route(__u32 net, struct lnet_nid *gw) { LIST_HEAD(rnet_zombies); struct lnet_remotenet *rnet; @@ -851,23 +852,28 @@ lnet_del_route(__u32 net, lnet_nid_t gw_nid) struct list_head *rn_list; struct lnet_peer_ni *lpni; struct lnet_route *route; + struct lnet_nid gw_nid; LIST_HEAD(zombies); struct lnet_peer *lp = NULL; int i = 0; CDEBUG(D_NET, "Del route: net %s : gw %s\n", - libcfs_net2str(net), libcfs_nid2str(gw_nid)); + libcfs_net2str(net), libcfs_nidstr(gw)); /* NB Caller may specify either all routes via the given gateway * or a specific route entry actual NIDs) */ lnet_net_lock(LNET_LOCK_EX); - lpni = lnet_find_peer_ni_locked(gw_nid); + if (gw) + lpni = lnet_peer_ni_find_locked(gw); + else + lpni = NULL; if (lpni) { lp = lpni->lpni_peer_net->lpn_peer; LASSERT(lp); - gw_nid = lnet_nid_to_nid4(&lp->lp_primary_nid); + gw_nid = lp->lp_primary_nid; + gw = &gw_nid; lnet_peer_ni_decref_locked(lpni); } @@ -877,7 +883,7 @@ lnet_del_route(__u32 net, lnet_nid_t gw_nid) lnet_net_unlock(LNET_LOCK_EX); return -ENOENT; } - lnet_del_route_from_rnet(gw_nid, &rnet->lrn_routes, + lnet_del_route_from_rnet(gw, &rnet->lrn_routes, &zombies); if (list_empty(&rnet->lrn_routes)) list_move(&rnet->lrn_list, &rnet_zombies); @@ -888,7 +894,7 @@ lnet_del_route(__u32 net, lnet_nid_t gw_nid) rn_list = &the_lnet.ln_remote_nets_hash[i]; list_for_each_entry_safe(rnet, tmp, rn_list, lrn_list) { - lnet_del_route_from_rnet(gw_nid, &rnet->lrn_routes, + lnet_del_route_from_rnet(gw, &rnet->lrn_routes, &zombies); if (list_empty(&rnet->lrn_routes)) list_move(&rnet->lrn_list, &rnet_zombies); @@ -927,9 +933,9 @@ delete_zombies: } void -lnet_destroy_routes (void) +lnet_destroy_routes(void) { - lnet_del_route(LNET_NET_ANY, LNET_NID_ANY); + lnet_del_route(LNET_NET_ANY, NULL); } int lnet_get_rtr_pool_cfg(int cpt, struct lnet_ioctl_pool_cfg *pool_cfg) -- 1.8.3.1