diff options
author | Matthew Wilcox <mawilcox@microsoft.com> | 2017-11-28 18:53:03 +0300 |
---|---|---|
committer | Matthew Wilcox <mawilcox@microsoft.com> | 2018-02-07 00:41:26 +0300 |
commit | 85bd0438a249e7a7a0622e0b0b6663595fadcc27 (patch) | |
tree | 53120e72ee90b2540145b4079dd03da1044ca43b /net/sched | |
parent | 0b4ce8da79d65f9773601619bfc90d096f0a170e (diff) | |
download | linux-85bd0438a249e7a7a0622e0b0b6663595fadcc27.tar.xz |
cls_flower: Convert to idr_alloc_u32
Use the new helper which saves a temporary variable and a few lines
of code.
Signed-off-by: Matthew Wilcox <mawilcox@microsoft.com>
Diffstat (limited to 'net/sched')
-rw-r--r-- | net/sched/cls_flower.c | 26 |
1 files changed, 10 insertions, 16 deletions
diff --git a/net/sched/cls_flower.c b/net/sched/cls_flower.c index 2162e1c1f382..7d0ce2c40f93 100644 --- a/net/sched/cls_flower.c +++ b/net/sched/cls_flower.c @@ -865,7 +865,6 @@ static int fl_change(struct net *net, struct sk_buff *in_skb, struct cls_fl_filter *fnew; struct nlattr **tb; struct fl_flow_mask mask = {}; - unsigned long idr_index; int err; if (!tca[TCA_OPTIONS]) @@ -896,21 +895,17 @@ static int fl_change(struct net *net, struct sk_buff *in_skb, goto errout; if (!handle) { - err = idr_alloc_ext(&head->handle_idr, fnew, &idr_index, - 1, 0x80000000, GFP_KERNEL); - if (err) - goto errout; - fnew->handle = idr_index; - } - - /* user specifies a handle and it doesn't exist */ - if (handle && !fold) { - err = idr_alloc_ext(&head->handle_idr, fnew, &idr_index, - handle, handle + 1, GFP_KERNEL); - if (err) - goto errout; - fnew->handle = idr_index; + handle = 1; + err = idr_alloc_u32(&head->handle_idr, fnew, &handle, + INT_MAX, GFP_KERNEL); + } else if (!fold) { + /* user specifies a handle and it doesn't exist */ + err = idr_alloc_u32(&head->handle_idr, fnew, &handle, + handle, GFP_KERNEL); } + if (err) + goto errout; + fnew->handle = handle; if (tb[TCA_FLOWER_FLAGS]) { fnew->flags = nla_get_u32(tb[TCA_FLOWER_FLAGS]); @@ -966,7 +961,6 @@ static int fl_change(struct net *net, struct sk_buff *in_skb, *arg = fnew; if (fold) { - fnew->handle = handle; idr_replace(&head->handle_idr, fnew, fnew->handle); list_replace_rcu(&fold->list, &fnew->list); tcf_unbind_filter(tp, &fold->res); |