On Thu, 14 Dec 2017 14:10:45 +0100, Jiri Pirko wrote: > >Why? Just a namechange? > > > > > >>IIUC the problem is we don't know whether the driver/callee of the new > >>port is aware of previous callbacks/filters and we can't replay them. > > Well, the problem is a bit different. > There are 2 scenarios when we need to fail here: > 1) tc offload feature is turned off, there are some filters offloaded in > the block. That is what I commented above. > 2) tc offload feature is turned on, there are some filters offloaded in > the block but the block is not accounted by the driver. This is > because of the lack or replay. This is taken care of in the beginning > of __tcf_block_cb_register function - see below, there is a comment > there.
Restating in code terms, shouldn't this: + tcf_block_offload_cmd(block, dev, ei, TC_BLOCK_BIND); + return 0; return the error like this: return tcf_block_offload_cmd(block, dev, ei, TC_BLOCK_BIND); We expect simple drivers to do this: case TC_BLOCK_BIND: return tcf_block_cb_register(f->block, mycb, priv, priv); Which will return an error for shared offloaded block, just need to propagate it.