Add a new helper function to allocate tcf_block_cb objects. Signed-off-by: Pablo Neira Ayuso <pablo@xxxxxxxxxxxxx> --- include/net/pkt_cls.h | 8 ++++++++ net/sched/cls_api.c | 23 +++++++++++++++++++---- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/include/net/pkt_cls.h b/include/net/pkt_cls.h index 720f2b32fc2f..276a17a3547b 100644 --- a/include/net/pkt_cls.h +++ b/include/net/pkt_cls.h @@ -72,6 +72,8 @@ static inline struct Qdisc *tcf_block_q(struct tcf_block *block) return block->q; } +struct tcf_block_cb *tcf_block_cb_alloc(tc_setup_cb_t *cb, + void *cb_ident, void *cb_priv); void *tcf_block_cb_priv(struct tcf_block_cb *block_cb); struct tcf_block_cb *tcf_block_cb_lookup(struct tcf_block *block, tc_setup_cb_t *cb, void *cb_ident); @@ -150,6 +152,12 @@ void tc_setup_cb_block_unregister(struct tcf_block *block, tc_setup_cb_t *cb, { } +static inline struct tcf_block_cb * +tcf_block_cb_alloc(tc_setup_cb_t *cb, void *cb_ident, void *cb_priv) +{ + return NULL; +} + static inline void *tcf_block_cb_priv(struct tcf_block_cb *block_cb) { diff --git a/net/sched/cls_api.c b/net/sched/cls_api.c index b2417fda26ec..c01d825edab5 100644 --- a/net/sched/cls_api.c +++ b/net/sched/cls_api.c @@ -746,6 +746,23 @@ unsigned int tcf_block_cb_decref(struct tcf_block_cb *block_cb) } EXPORT_SYMBOL(tcf_block_cb_decref); +struct tcf_block_cb *tcf_block_cb_alloc(tc_setup_cb_t *cb, + void *cb_ident, void *cb_priv) +{ + struct tcf_block_cb *block_cb; + + block_cb = kzalloc(sizeof(*block_cb), GFP_KERNEL); + if (!block_cb) + return NULL; + + block_cb->cb = cb; + block_cb->cb_ident = cb_ident; + block_cb->cb_priv = cb_priv; + + return block_cb; +} +EXPORT_SYMBOL(tcf_block_cb_alloc); + struct tcf_block_cb *__tcf_block_cb_register(struct tcf_block *block, tc_setup_cb_t *cb, void *cb_ident, void *cb_priv, @@ -761,12 +778,10 @@ struct tcf_block_cb *__tcf_block_cb_register(struct tcf_block *block, if (err) return ERR_PTR(err); - block_cb = kzalloc(sizeof(*block_cb), GFP_KERNEL); + block_cb = tcf_block_cb_alloc(cb, cb_ident, cb_priv); if (!block_cb) return ERR_PTR(-ENOMEM); - block_cb->cb = cb; - block_cb->cb_ident = cb_ident; - block_cb->cb_priv = cb_priv; + list_add(&block_cb->list, &block->cb_list); return block_cb; } -- 2.11.0