Whamcloud - gitweb
LU-10391 lnet: change lnet_del_route() to take lnet_nid 15/43615/11
authorMr NeilBrown <neilb@suse.de>
Tue, 31 Aug 2021 13:54:33 +0000 (09:54 -0400)
committerOleg Drokin <green@whamcloud.com>
Wed, 26 Jan 2022 05:13:53 +0000 (05:13 +0000)
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 <neilb@suse.de>
Change-Id: I1243be20d9f40e4ac3ebc6ec5dd9bbcbae6653c3
Reviewed-on: https://review.whamcloud.com/43615
Reviewed-by: James Simmons <jsimmons@infradead.org>
Reviewed-by: Cyril Bordage <cbordage@whamcloud.com>
Reviewed-by: Chris Horn <chris.horn@hpe.com>
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lnet/include/lnet/lib-lnet.h
lnet/lnet/api-ni.c
lnet/lnet/peer.c
lnet/lnet/router.c

index c3c55cd..3ee4e0c 100644 (file)
@@ -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);
index a3567c8..e2ec63f 100644 (file)
@@ -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;
 
index 620d406..853cfe5 100644 (file)
@@ -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);
                }
        }
index 52a5502..c7a160b 100644 (file)
@@ -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)