diff options
| author | Donald Sharp <sharpd@nvidia.com> | 2022-06-29 15:24:20 -0400 | 
|---|---|---|
| committer | Donald Sharp <sharpd@nvidia.com> | 2022-06-29 15:24:20 -0400 | 
| commit | f00b37e710e5dd402a514af8817e2cca7d1710ce (patch) | |
| tree | 94e8469e1a35c6d4f932c74fccae18dc23165591 /zebra/zebra_rib.c | |
| parent | 03c95c540f1884dcaf74a81bc309fc51547054dd (diff) | |
zebra: make rib_process_dplane_results own ctx freeing
The rib_process_dplane_results function was having each
sub function handler process the results and then
free the ctx.  Lot's of functionality that needs to remember
to free the context.  Let's just free it in the main loop.
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
Diffstat (limited to 'zebra/zebra_rib.c')
| -rw-r--r-- | zebra/zebra_rib.c | 33 | 
1 files changed, 5 insertions, 28 deletions
diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c index 63f15b0f20..261335e4a4 100644 --- a/zebra/zebra_rib.c +++ b/zebra/zebra_rib.c @@ -2087,9 +2087,6 @@ done:  	if (rn)  		route_unlock_node(rn); - -	/* Return context to dataplane module */ -	dplane_ctx_fini(&ctx);  }  /* @@ -2323,9 +2320,6 @@ static void rib_process_dplane_notify(struct zebra_dplane_ctx *ctx)  done:  	if (rn)  		route_unlock_node(rn); - -	/* Return context to dataplane module */ -	dplane_ctx_fini(&ctx);  }  /* @@ -4191,7 +4185,7 @@ void rib_close_table(struct route_table *table)  /*   * Handler for async dataplane results after a pseudowire installation   */ -static int handle_pw_result(struct zebra_dplane_ctx *ctx) +static void handle_pw_result(struct zebra_dplane_ctx *ctx)  {  	struct zebra_pw *pw;  	struct zebra_vrf *vrf; @@ -4200,7 +4194,7 @@ static int handle_pw_result(struct zebra_dplane_ctx *ctx)  	 * result for installation attempts here.  	 */  	if (dplane_ctx_get_op(ctx) != DPLANE_OP_PW_INSTALL) -		goto done; +		return;  	if (dplane_ctx_get_status(ctx) != ZEBRA_DPLANE_REQUEST_SUCCESS) {  		vrf = zebra_vrf_lookup_by_id(dplane_ctx_get_vrf(ctx)); @@ -4209,14 +4203,8 @@ static int handle_pw_result(struct zebra_dplane_ctx *ctx)  			zebra_pw_install_failure(pw,  						 dplane_ctx_get_pw_status(ctx));  	} - -done: -	dplane_ctx_fini(&ctx); - -	return 0;  } -  /*   * Handle results from the dataplane system. Dequeue update context   * structs, dispatch to appropriate internal handlers. @@ -4289,7 +4277,6 @@ static void rib_process_dplane_results(struct thread *thread)  			case DPLANE_OP_ROUTE_INSTALL:  			case DPLANE_OP_ROUTE_UPDATE:  			case DPLANE_OP_ROUTE_DELETE: -			{  				/* Bit of special case for route updates  				 * that were generated by async notifications:  				 * we don't want to continue processing these @@ -4297,10 +4284,7 @@ static void rib_process_dplane_results(struct thread *thread)  				 */  				if (dplane_ctx_get_notif_provider(ctx) == 0)  					rib_process_result(ctx); -				else -					dplane_ctx_fini(&ctx); -			} -			break; +				break;  			case DPLANE_OP_ROUTE_NOTIFY:  				rib_process_dplane_notify(ctx); @@ -4315,17 +4299,13 @@ static void rib_process_dplane_results(struct thread *thread)  			case DPLANE_OP_LSP_INSTALL:  			case DPLANE_OP_LSP_UPDATE:  			case DPLANE_OP_LSP_DELETE: -			{  				/* Bit of special case for LSP updates  				 * that were generated by async notifications:  				 * we don't want to continue processing these.  				 */  				if (dplane_ctx_get_notif_provider(ctx) == 0)  					zebra_mpls_lsp_dplane_result(ctx); -				else -					dplane_ctx_fini(&ctx); -			} -			break; +				break;  			case DPLANE_OP_LSP_NOTIFY:  				zebra_mpls_process_dplane_notify(ctx); @@ -4338,8 +4318,6 @@ static void rib_process_dplane_results(struct thread *thread)  			case DPLANE_OP_SYS_ROUTE_ADD:  			case DPLANE_OP_SYS_ROUTE_DELETE: -				/* No further processing in zebra for these. */ -				dplane_ctx_fini(&ctx);  				break;  			case DPLANE_OP_MAC_INSTALL: @@ -4383,12 +4361,11 @@ static void rib_process_dplane_results(struct thread *thread)  			case DPLANE_OP_NEIGH_TABLE_UPDATE:  			case DPLANE_OP_GRE_SET:  			case DPLANE_OP_NONE: -				/* Don't expect this: just return the struct? */ -				dplane_ctx_fini(&ctx);  				break;  			} /* Dispatch by op code */ +			dplane_ctx_fini(&ctx);  			ctx = dplane_ctx_dequeue(&ctxlist);  		}  | 
