mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-28 14:44:10 +08:00
net_sched: remove cls_flower idr on failure
Fixes: c15ab236d6
("net/sched: Change cls_flower to use IDR")
Cc: Chris Mi <chrism@mellanox.com>
Cc: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
Acked-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
21f4d5cc25
commit
fe2502e49b
@ -922,28 +922,28 @@ static int fl_change(struct net *net, struct sk_buff *in_skb,
|
|||||||
|
|
||||||
if (!tc_flags_valid(fnew->flags)) {
|
if (!tc_flags_valid(fnew->flags)) {
|
||||||
err = -EINVAL;
|
err = -EINVAL;
|
||||||
goto errout;
|
goto errout_idr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
err = fl_set_parms(net, tp, fnew, &mask, base, tb, tca[TCA_RATE], ovr);
|
err = fl_set_parms(net, tp, fnew, &mask, base, tb, tca[TCA_RATE], ovr);
|
||||||
if (err)
|
if (err)
|
||||||
goto errout;
|
goto errout_idr;
|
||||||
|
|
||||||
err = fl_check_assign_mask(head, &mask);
|
err = fl_check_assign_mask(head, &mask);
|
||||||
if (err)
|
if (err)
|
||||||
goto errout;
|
goto errout_idr;
|
||||||
|
|
||||||
if (!tc_skip_sw(fnew->flags)) {
|
if (!tc_skip_sw(fnew->flags)) {
|
||||||
if (!fold && fl_lookup(head, &fnew->mkey)) {
|
if (!fold && fl_lookup(head, &fnew->mkey)) {
|
||||||
err = -EEXIST;
|
err = -EEXIST;
|
||||||
goto errout;
|
goto errout_idr;
|
||||||
}
|
}
|
||||||
|
|
||||||
err = rhashtable_insert_fast(&head->ht, &fnew->ht_node,
|
err = rhashtable_insert_fast(&head->ht, &fnew->ht_node,
|
||||||
head->ht_params);
|
head->ht_params);
|
||||||
if (err)
|
if (err)
|
||||||
goto errout;
|
goto errout_idr;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!tc_skip_hw(fnew->flags)) {
|
if (!tc_skip_hw(fnew->flags)) {
|
||||||
@ -952,7 +952,7 @@ static int fl_change(struct net *net, struct sk_buff *in_skb,
|
|||||||
&mask.key,
|
&mask.key,
|
||||||
fnew);
|
fnew);
|
||||||
if (err)
|
if (err)
|
||||||
goto errout;
|
goto errout_idr;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!tc_in_hw(fnew->flags))
|
if (!tc_in_hw(fnew->flags))
|
||||||
@ -981,6 +981,9 @@ static int fl_change(struct net *net, struct sk_buff *in_skb,
|
|||||||
kfree(tb);
|
kfree(tb);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
errout_idr:
|
||||||
|
if (fnew->handle)
|
||||||
|
idr_remove_ext(&head->handle_idr, fnew->handle);
|
||||||
errout:
|
errout:
|
||||||
tcf_exts_destroy(&fnew->exts);
|
tcf_exts_destroy(&fnew->exts);
|
||||||
kfree(fnew);
|
kfree(fnew);
|
||||||
|
Loading…
Reference in New Issue
Block a user