On Fri, Feb 15, 2019 at 2:02 AM Vlad Buslov <vla...@mellanox.com> wrote: > > I looked at the code and problem seems to be matchall classifier > specific. My implementation of unlocked cls API assumes that concurrent > insertions are possible and checks for it when deleting "empty" tp. > Since classifiers don't expose number of elements, the only way to test > this is to do tp->walk() on them and assume that walk callback is called > once per filter on every classifier. In your example new tp is created > for second filter, filter insertion fails, number of elements on newly > created tp is checked with tp->walk() before deleting it. However, > matchall classifier always calls the tp->walk() callback once, even when > it doesn't have a valid filter (in this case with NULL filter pointer).
Again, this can be eliminated by just switching to normal non-retry logic. This is yet another headache to review this kind of unlock-and-retry logic, I have no idea why you are such a big fan of it.