提交 b3ae2d35 编写于 作者: V Volodymyr Mytnyk 提交者: David S. Miller

net: prestera: flower: fix destroy tmpl in chain

Fix flower destroy template callback to release template
only for specific tc chain instead of all chain tempaltes.

The issue was intruduced by previous commit that introduced
multi-chain support.

Fixes: fa5d824c ("net: prestera: acl: add multi-chain support offload")
Signed-off-by: NVolodymyr Mytnyk <vmytnyk@marvell.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 36a29fb6
...@@ -12,18 +12,21 @@ struct prestera_flower_template { ...@@ -12,18 +12,21 @@ struct prestera_flower_template {
u32 chain_index; u32 chain_index;
}; };
void prestera_flower_template_cleanup(struct prestera_flow_block *block) static void
prestera_flower_template_free(struct prestera_flower_template *template)
{ {
struct prestera_flower_template *template;
struct list_head *pos, *n;
/* put the reference to all rulesets kept in tmpl create */
list_for_each_safe(pos, n, &block->template_list) {
template = list_entry(pos, typeof(*template), list);
prestera_acl_ruleset_put(template->ruleset); prestera_acl_ruleset_put(template->ruleset);
list_del(&template->list); list_del(&template->list);
kfree(template); kfree(template);
} }
void prestera_flower_template_cleanup(struct prestera_flow_block *block)
{
struct prestera_flower_template *template, *tmp;
/* put the reference to all rulesets kept in tmpl create */
list_for_each_entry_safe(template, tmp, &block->template_list, list)
prestera_flower_template_free(template);
} }
static int static int
...@@ -423,7 +426,14 @@ int prestera_flower_tmplt_create(struct prestera_flow_block *block, ...@@ -423,7 +426,14 @@ int prestera_flower_tmplt_create(struct prestera_flow_block *block,
void prestera_flower_tmplt_destroy(struct prestera_flow_block *block, void prestera_flower_tmplt_destroy(struct prestera_flow_block *block,
struct flow_cls_offload *f) struct flow_cls_offload *f)
{ {
prestera_flower_template_cleanup(block); struct prestera_flower_template *template, *tmp;
list_for_each_entry_safe(template, tmp, &block->template_list, list)
if (template->chain_index == f->common.chain_index) {
/* put the reference to the ruleset kept in create */
prestera_flower_template_free(template);
return;
}
} }
int prestera_flower_stats(struct prestera_flow_block *block, int prestera_flower_stats(struct prestera_flow_block *block,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册