Skip to content

Commit

Permalink
cls_u32: Reinstate cyclic allocation
Browse files Browse the repository at this point in the history
Commit e761437 ("net_sched: use idr to allocate u32 filter handles)
converted htid allocation to use the IDR.  The ID allocated by this
scheme changes; it used to be cyclic, but now always allocates the
lowest available.  The IDR supports cyclic allocation, so just use
the right function.

Signed-off-by: Matthew Wilcox <mawilcox@microsoft.com>
  • Loading branch information
Matthew Wilcox committed Feb 6, 2018
1 parent 85bd043 commit ffdc2d9
Showing 1 changed file with 4 additions and 10 deletions.
14 changes: 4 additions & 10 deletions net/sched/cls_u32.c
Original file line number Diff line number Diff line change
Expand Up @@ -316,19 +316,13 @@ static void *u32_get(struct tcf_proto *tp, u32 handle)
return u32_lookup_key(ht, handle);
}

/* Protected by rtnl lock */
static u32 gen_new_htid(struct tc_u_common *tp_c, struct tc_u_hnode *ptr)
{
unsigned long idr_index;
int err;

/* This is only used inside rtnl lock it is safe to increment
* without read _copy_ update semantics
*/
err = idr_alloc_ext(&tp_c->handle_idr, ptr, &idr_index,
1, 0x7FF, GFP_KERNEL);
if (err)
int id = idr_alloc_cyclic(&tp_c->handle_idr, ptr, 1, 0x7FF, GFP_KERNEL);
if (id < 0)
return 0;
return (u32)(idr_index | 0x800) << 20;
return (id | 0x800U) << 20;
}

static struct hlist_head *tc_u_common_hash;
Expand Down

0 comments on commit ffdc2d9

Please sign in to comment.