From f0afc61d58032e1c949728bad776e2046a154c8a Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Thu, 5 Aug 2021 10:10:37 -0400 Subject: [PATCH] zebra: short-circuit rib_process when nothing to do When we are calling rib_process and the route_node in question has no dest, there is no work to do here at all. As such we should just return before attempting to do any other work. This is just a tiny bit of simplification being done. Signed-off-by: Donald Sharp --- zebra/zebra_rib.c | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c index c51dd759a6..152edf00d0 100644 --- a/zebra/zebra_rib.c +++ b/zebra/zebra_rib.c @@ -1149,10 +1149,15 @@ static void rib_process(struct route_node *rn) assert(rn); dest = rib_dest_from_rnode(rn); - if (dest) { - zvrf = rib_dest_vrf(dest); - vrf_id = zvrf_id(zvrf); - } + /* + * We have an enqueued node with nothing to process here + * let's just finish up and return; + */ + if (!dest) + return; + + zvrf = rib_dest_vrf(dest); + vrf_id = zvrf_id(zvrf); vrf = vrf_lookup_by_id(vrf_id); @@ -1165,18 +1170,16 @@ static void rib_process(struct route_node *rn) * additionally we know RNODE_FOREACH_RE_SAFE * will not iterate so we are ok. */ - if (dest) { - if (IS_ZEBRA_DEBUG_RIB_DETAILED) { - struct route_entry *re = re_list_first(&dest->routes); + if (IS_ZEBRA_DEBUG_RIB_DETAILED) { + struct route_entry *re = re_list_first(&dest->routes); - zlog_debug("%s(%u:%u):%s: Processing rn %p", - VRF_LOGNAME(vrf), vrf_id, re->table, buf, - rn); - } - - old_fib = dest->selected_fib; + zlog_debug("%s(%u:%u):%s: Processing rn %p", + VRF_LOGNAME(vrf), vrf_id, re->table, buf, + rn); } + old_fib = dest->selected_fib; + RNODE_FOREACH_RE_SAFE (rn, re, next) { if (IS_ZEBRA_DEBUG_RIB_DETAILED) { char flags_buf[128];