From: Chris Horn Date: Tue, 22 Oct 2019 00:46:14 +0000 (-0500) Subject: LU-12756 lnet: Avoid extra lnet_remotenet lookup X-Git-Tag: 2.13.52~111 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=3812c54b9ca3cc08be947f893bdf55a41aa876ed LU-12756 lnet: Avoid extra lnet_remotenet lookup We can keep track of the lnet_remotenet object associated with the "best" lnet_peer_net, and pass that lnet_remotenet directly to lnet_find_route_locked(). Test-Parameters: trivial Signed-off-by: Chris Horn Change-Id: Ib9808ca885c698ba6c73c5243fbce8b3f499b790 Reviewed-on: https://review.whamcloud.com/36536 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Alexandr Boyko Reviewed-by: Alexey Lyashkov Reviewed-by: Amir Shehata Reviewed-by: Oleg Drokin --- diff --git a/lnet/lnet/lib-move.c b/lnet/lnet/lib-move.c index f735355..e9daed8 100644 --- a/lnet/lnet/lib-move.c +++ b/lnet/lnet/lib-move.c @@ -1510,23 +1510,18 @@ lnet_compare_routes(struct lnet_route *r1, struct lnet_route *r2, } static struct lnet_route * -lnet_find_route_locked(struct lnet_net *net, __u32 remote_net, +lnet_find_route_locked(struct lnet_remotenet *rnet, struct lnet_route **prev_route, struct lnet_peer_ni **gwni) { struct lnet_peer_ni *best_gw_ni = NULL; struct lnet_route *best_route; struct lnet_route *last_route; - struct lnet_remotenet *rnet; struct lnet_peer *lp_best; struct lnet_route *route; struct lnet_peer *lp; int rc; - rnet = lnet_find_rnet_locked(remote_net); - if (rnet == NULL) - return NULL; - lp_best = NULL; best_route = last_route = NULL; list_for_each_entry(route, &rnet->lrn_routes, lr_list) { @@ -2032,7 +2027,7 @@ lnet_handle_find_routed_path(struct lnet_send_data *sd, struct lnet_peer *lp; struct lnet_peer_net *lpn; struct lnet_peer_net *best_lpn = NULL; - struct lnet_remotenet *rnet; + struct lnet_remotenet *rnet, *best_rnet = NULL; struct lnet_route *best_route = NULL; struct lnet_route *last_route = NULL; struct lnet_peer_ni *lpni = NULL; @@ -2067,13 +2062,16 @@ lnet_handle_find_routed_path(struct lnet_send_data *sd, if (!rnet) continue; - if (!best_lpn) + if (!best_lpn) { best_lpn = lpn; + best_rnet = rnet; + } if (best_lpn->lpn_seq <= lpn->lpn_seq) continue; best_lpn = lpn; + best_rnet = rnet; } if (!best_lpn) { @@ -2092,8 +2090,8 @@ lnet_handle_find_routed_path(struct lnet_send_data *sd, return -EHOSTUNREACH; } - best_route = lnet_find_route_locked(NULL, best_lpn->lpn_net_id, - &last_route, &gwni); + best_route = lnet_find_route_locked(best_rnet, &last_route, + &gwni); if (!best_route) { CERROR("no route to %s from %s\n", libcfs_nid2str(dst_nid),