| From e246bb4f038b1c41a20b8399863536b91d5c80c2 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 2 Jun 2021 19:38:59 +0530 |
| Subject: cxgb4: fix regression with HASH tc prio value update |
| |
| From: Rahul Lakkireddy <rahul.lakkireddy@chelsio.com> |
| |
| [ Upstream commit a27fb314cba8cb84cd6456a4699c3330a83c326d ] |
| |
| commit db43b30cd89c ("cxgb4: add ethtool n-tuple filter deletion") |
| has moved searching for next highest priority HASH filter rule to |
| cxgb4_flow_rule_destroy(), which searches the rhashtable before the |
| the rule is removed from it and hence always finds at least 1 entry. |
| Fix by removing the rule from rhashtable first before calling |
| cxgb4_flow_rule_destroy() and hence avoid fetching stale info. |
| |
| Fixes: db43b30cd89c ("cxgb4: add ethtool n-tuple filter deletion") |
| Signed-off-by: Rahul Lakkireddy <rahul.lakkireddy@chelsio.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| .../net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c | 14 +++++--------- |
| 1 file changed, 5 insertions(+), 9 deletions(-) |
| |
| diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c |
| index 1b88bd1c2dbe..dd9be229819a 100644 |
| --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c |
| +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c |
| @@ -997,20 +997,16 @@ int cxgb4_tc_flower_destroy(struct net_device *dev, |
| if (!ch_flower) |
| return -ENOENT; |
| |
| + rhashtable_remove_fast(&adap->flower_tbl, &ch_flower->node, |
| + adap->flower_ht_params); |
| + |
| ret = cxgb4_flow_rule_destroy(dev, ch_flower->fs.tc_prio, |
| &ch_flower->fs, ch_flower->filter_id); |
| if (ret) |
| - goto err; |
| + netdev_err(dev, "Flow rule destroy failed for tid: %u, ret: %d", |
| + ch_flower->filter_id, ret); |
| |
| - ret = rhashtable_remove_fast(&adap->flower_tbl, &ch_flower->node, |
| - adap->flower_ht_params); |
| - if (ret) { |
| - netdev_err(dev, "Flow remove from rhashtable failed"); |
| - goto err; |
| - } |
| kfree_rcu(ch_flower, rcu); |
| - |
| -err: |
| return ret; |
| } |
| |
| -- |
| 2.30.2 |
| |