@tc_indr_block_dev_get funcion, static struct tc_indr_block_dev *tc_indr_block_dev_get(struct net_device *dev) { struct tc_indr_block_dev *indr_dev; indr_dev = tc_indr_block_dev_lookup(dev); if (indr_dev) goto inc_ref; indr_dev = kzalloc(sizeof(*indr_dev), GFP_KERNEL); if (!indr_dev) return NULL; INIT_LIST_HEAD(&indr_dev->cb_list); indr_dev->dev = dev; indr_dev->block = tc_dev_ingress_block(dev); when the indr device register. It will call __tc_indr_block_cb_register-->tc_indr_block_dev_get, It can get the indr_dev->block immediately through tc_dev_ingress_block, But when the indr_block_dev_get put in the common flow_offload. It can not direct access tc_dev_ingress_block. On 7/25/2019 6:24 PM, Florian Westphal wrote: > wenxu@xxxxxxxxx <wenxu@xxxxxxxxx> wrote: >> From: wenxu <wenxu@xxxxxxxxx> >> >> It provide a callback to find the tcf block in >> the flow_indr_block_dev_get > Can you explain why you're making this change? > This will help us understand the concept/idea of your series. > > The above describes what the patch does, but it should > explain why this is callback is added. >