ipv4: Fix fib_trie rebalancing, part 2
authorJarek Poplawski <jarkao2@gmail.com>
Thu, 18 Jun 2009 07:28:51 +0000 (00:28 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 18 Jun 2009 07:28:51 +0000 (00:28 -0700)
commit7b85576d15bf2574b0a451108f59f9ad4170dd3f
treea2d8075b9d234b0a937d7dd82b95cb16b953aec7
parentb964758050f856e44f5fe645d03bea8a1b0b66bd
ipv4: Fix fib_trie rebalancing, part 2

My previous patch, which explicitly delays freeing of tnodes by adding
them to the list to flush them after the update is finished, isn't
strict enough. It treats exceptionally tnodes without parent, assuming
they are newly created, so "invisible" for the read side yet.

But the top tnode doesn't have parent as well, so we have to exclude
all exceptions (at least until a better way is found). Additionally we
need to move rcu assignment of this node before flushing, so the
return type of the trie_rebalance() function is changed.

Reported-by: Yan Zheng <zheng.yan@oracle.com>
Signed-off-by: Jarek Poplawski <jarkao2@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/fib_trie.c