Re: [Patch net] net_sched: remove cls_flower idr on failure

2017-09-21 Thread David Miller
From: Cong Wang 
Date: Wed, 20 Sep 2017 09:18:45 -0700

> Fixes: c15ab236d69d ("net/sched: Change cls_flower to use IDR")
> Cc: Chris Mi 
> Cc: Jiri Pirko 
> Signed-off-by: Cong Wang 

Applied, thanks.


Re: [Patch net] net_sched: remove cls_flower idr on failure

2017-09-21 Thread Cong Wang
On Thu, Sep 21, 2017 at 11:47 AM, Cong Wang  wrote:
> On Wed, Sep 20, 2017 at 9:18 AM, Cong Wang  wrote:
>> +errout_idr:
>> +   if (fnew->handle)
>> +   idr_remove_ext(>handle_idr, fnew->handle);
>
> Hmm, I should check fold instead of fnew->handle here.
> I will update this patch.

Never mind, it should be the same logic. If fold is non-NULL,
then fnew->handle == 0.

It can be applied as it is.


Re: [Patch net] net_sched: remove cls_flower idr on failure

2017-09-21 Thread Cong Wang
On Wed, Sep 20, 2017 at 9:18 AM, Cong Wang  wrote:
> +errout_idr:
> +   if (fnew->handle)
> +   idr_remove_ext(>handle_idr, fnew->handle);

Hmm, I should check fold instead of fnew->handle here.
I will update this patch.


Re: [Patch net] net_sched: remove cls_flower idr on failure

2017-09-20 Thread Jiri Pirko
Wed, Sep 20, 2017 at 06:18:45PM CEST, xiyou.wangc...@gmail.com wrote:
>Fixes: c15ab236d69d ("net/sched: Change cls_flower to use IDR")
>Cc: Chris Mi 
>Cc: Jiri Pirko 
>Signed-off-by: Cong Wang 

Looks fine.
Acked-by: Jiri Pirko 


[Patch net] net_sched: remove cls_flower idr on failure

2017-09-20 Thread Cong Wang
Fixes: c15ab236d69d ("net/sched: Change cls_flower to use IDR")
Cc: Chris Mi 
Cc: Jiri Pirko 
Signed-off-by: Cong Wang 
---
 net/sched/cls_flower.c | 15 +--
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/net/sched/cls_flower.c b/net/sched/cls_flower.c
index 1a267e77c6de..d230cb4c8094 100644
--- a/net/sched/cls_flower.c
+++ b/net/sched/cls_flower.c
@@ -922,28 +922,28 @@ static int fl_change(struct net *net, struct sk_buff 
*in_skb,
 
if (!tc_flags_valid(fnew->flags)) {
err = -EINVAL;
-   goto errout;
+   goto errout_idr;
}
}
 
err = fl_set_parms(net, tp, fnew, , base, tb, tca[TCA_RATE], ovr);
if (err)
-   goto errout;
+   goto errout_idr;
 
err = fl_check_assign_mask(head, );
if (err)
-   goto errout;
+   goto errout_idr;
 
if (!tc_skip_sw(fnew->flags)) {
if (!fold && fl_lookup(head, >mkey)) {
err = -EEXIST;
-   goto errout;
+   goto errout_idr;
}
 
err = rhashtable_insert_fast(>ht, >ht_node,
 head->ht_params);
if (err)
-   goto errout;
+   goto errout_idr;
}
 
if (!tc_skip_hw(fnew->flags)) {
@@ -952,7 +952,7 @@ static int fl_change(struct net *net, struct sk_buff 
*in_skb,
   ,
   fnew);
if (err)
-   goto errout;
+   goto errout_idr;
}
 
if (!tc_in_hw(fnew->flags))
@@ -981,6 +981,9 @@ static int fl_change(struct net *net, struct sk_buff 
*in_skb,
kfree(tb);
return 0;
 
+errout_idr:
+   if (fnew->handle)
+   idr_remove_ext(>handle_idr, fnew->handle);
 errout:
tcf_exts_destroy(>exts);
kfree(fnew);
-- 
2.13.0