aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Hurley <john.hurley@netronome.com>2018-11-27 17:04:11 -0500
committerDavid S. Miller <davem@davemloft.net>2018-11-30 16:24:56 -0500
commit1166494891da88af25c444e65cd4f32c3e026b46 (patch)
treeba4cad89e191ba5d522961cb49f09886177b43ae
parent3b5b3a3331d141e8f2a7aaae3a94dfa1e61ecbe4 (diff)
nfp: flower: release metadata on offload failure
Calling nfp_compile_flow_metadata both assigns a stats context and increments a ref counter on (or allocates) a mask id table entry. These are released by the nfp_modify_flow_metadata call on flow deletion, however, if a flow add fails after metadata is set then the flow entry will be deleted but the metadata assignments leaked. Add an error path to the flow add offload function to ensure allocated metadata is released in the event of an offload fail. Fixes: 81f3ddf2547d ("nfp: add control message passing capabilities to flower offloads") Signed-off-by: John Hurley <john.hurley@netronome.com> Reviewed-by: Pieter Jansen van Vuuren <pieter.jansenvanvuuren@netronome.com> Reviewed-by: Jakub Kicinski <jakub.kicinski@netronome.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/netronome/nfp/flower/offload.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/net/ethernet/netronome/nfp/flower/offload.c b/drivers/net/ethernet/netronome/nfp/flower/offload.c
index 29c95423ab64..c3ad8d737cf0 100644
--- a/drivers/net/ethernet/netronome/nfp/flower/offload.c
+++ b/drivers/net/ethernet/netronome/nfp/flower/offload.c
@@ -479,13 +479,13 @@ nfp_flower_add_offload(struct nfp_app *app, struct net_device *netdev,
479 err = nfp_flower_xmit_flow(netdev, flow_pay, 479 err = nfp_flower_xmit_flow(netdev, flow_pay,
480 NFP_FLOWER_CMSG_TYPE_FLOW_ADD); 480 NFP_FLOWER_CMSG_TYPE_FLOW_ADD);
481 if (err) 481 if (err)
482 goto err_destroy_flow; 482 goto err_release_metadata;
483 483
484 flow_pay->tc_flower_cookie = flow->cookie; 484 flow_pay->tc_flower_cookie = flow->cookie;
485 err = rhashtable_insert_fast(&priv->flow_table, &flow_pay->fl_node, 485 err = rhashtable_insert_fast(&priv->flow_table, &flow_pay->fl_node,
486 nfp_flower_table_params); 486 nfp_flower_table_params);
487 if (err) 487 if (err)
488 goto err_destroy_flow; 488 goto err_release_metadata;
489 489
490 port->tc_offload_cnt++; 490 port->tc_offload_cnt++;
491 491
@@ -494,6 +494,8 @@ nfp_flower_add_offload(struct nfp_app *app, struct net_device *netdev,
494 494
495 return 0; 495 return 0;
496 496
497err_release_metadata:
498 nfp_modify_flow_metadata(app, flow_pay);
497err_destroy_flow: 499err_destroy_flow:
498 kfree(flow_pay->action_data); 500 kfree(flow_pay->action_data);
499 kfree(flow_pay->mask_data); 501 kfree(flow_pay->mask_data);