Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ffdc2d9e authored by Matthew Wilcox's avatar Matthew Wilcox
Browse files

cls_u32: Reinstate cyclic allocation



Commit e7614370 ("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: default avatarMatthew Wilcox <mawilcox@microsoft.com>
parent 85bd0438
Loading
Loading
Loading
Loading
+4 −10
Original line number Diff line number Diff line
@@ -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;