Sat, Jan 06, 2018 at 12:09:19AM CET, j...@resnulli.us wrote: >From: Jiri Pirko <j...@mellanox.com> > >So far, there was possible only to register a single filter chain >pointer to block->chain[0]. However, when the blocks will get shareable, >we need to allow multiple filter chain pointers registration. > >Signed-off-by: Jiri Pirko <j...@mellanox.com> >---
[...] >+static int tcf_block_insert(struct tcf_block *block, struct net *net, >+ u32 block_index, struct netlink_ext_ack *extack) >+{ >+ struct tcf_net *tn = net_generic(net, tcf_net_id); >+ int idr_start; >+ int idr_end; >+ int index; >+ >+ if (block_index >= INT_MAX) { >+ NL_SET_ERR_MSG(extack, "Invalid block index value (>= >INT_MAX)"); >+ return -EINVAL; >+ } >+ idr_start = block_index ? block_index : 1; >+ idr_end = block_index ? block_index + 1 : INT_MAX; >+ >+ index = idr_alloc(&tn->idr, block, idr_start, idr_end, GFP_KERNEL); Oh, I have to do idr_alloc_ext