Skip to content

Commit fe2502e

Browse files
congwangdavem330
authored andcommitted
net_sched: remove cls_flower idr on failure
Fixes: c15ab23 ("net/sched: Change cls_flower to use IDR") Cc: Chris Mi <[email protected]> Cc: Jiri Pirko <[email protected]> Signed-off-by: Cong Wang <[email protected]> Acked-by: Jiri Pirko <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 21f4d5c commit fe2502e

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

net/sched/cls_flower.c

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -922,28 +922,28 @@ static int fl_change(struct net *net, struct sk_buff *in_skb,
922922

923923
if (!tc_flags_valid(fnew->flags)) {
924924
err = -EINVAL;
925-
goto errout;
925+
goto errout_idr;
926926
}
927927
}
928928

929929
err = fl_set_parms(net, tp, fnew, &mask, base, tb, tca[TCA_RATE], ovr);
930930
if (err)
931-
goto errout;
931+
goto errout_idr;
932932

933933
err = fl_check_assign_mask(head, &mask);
934934
if (err)
935-
goto errout;
935+
goto errout_idr;
936936

937937
if (!tc_skip_sw(fnew->flags)) {
938938
if (!fold && fl_lookup(head, &fnew->mkey)) {
939939
err = -EEXIST;
940-
goto errout;
940+
goto errout_idr;
941941
}
942942

943943
err = rhashtable_insert_fast(&head->ht, &fnew->ht_node,
944944
head->ht_params);
945945
if (err)
946-
goto errout;
946+
goto errout_idr;
947947
}
948948

949949
if (!tc_skip_hw(fnew->flags)) {
@@ -952,7 +952,7 @@ static int fl_change(struct net *net, struct sk_buff *in_skb,
952952
&mask.key,
953953
fnew);
954954
if (err)
955-
goto errout;
955+
goto errout_idr;
956956
}
957957

958958
if (!tc_in_hw(fnew->flags))
@@ -981,6 +981,9 @@ static int fl_change(struct net *net, struct sk_buff *in_skb,
981981
kfree(tb);
982982
return 0;
983983

984+
errout_idr:
985+
if (fnew->handle)
986+
idr_remove_ext(&head->handle_idr, fnew->handle);
984987
errout:
985988
tcf_exts_destroy(&fnew->exts);
986989
kfree(fnew);

0 commit comments

Comments
 (0)