ipv4: Use synchronize_rcu() during trie_rebalance()
authorJarek Poplawski <jarkao2@gmail.com>
Tue, 14 Jul 2009 08:33:08 +0000 (08:33 +0000)
committerDavid S. Miller <davem@davemloft.net>
Mon, 20 Jul 2009 14:39:25 +0000 (07:39 -0700)
commitc3059477fce2d956a0bb3e04357324780c5d8eeb
treec08cd660873667268132d556c2b66d7f9725a173
parent2e477c9bd2bb6a1606e498adb53ba913378ecdf2
ipv4: Use synchronize_rcu() during trie_rebalance()

During trie_rebalance() we free memory after resizing with call_rcu(),
but large updates, especially with PREEMPT_NONE configs, can cause
memory stresses, so this patch calls synchronize_rcu() in
tnode_free_flush() after each sync_pages to guarantee such freeing
(especially before resizing the root node).

The value of sync_pages = 128 is based on Pawel Staszewski's tests as
the lowest which doesn't hinder updating times. (For testing purposes
there was a sysfs module parameter to change it on demand, but it's
removed until we're sure it could be really useful.)

The patch is based on suggestions by: Paul E. McKenney
<paulmck@linux.vnet.ibm.com>

Reported-by: Pawel Staszewski <pstaszewski@itcare.pl>
Tested-by: Pawel Staszewski <pstaszewski@itcare.pl>
Signed-off-by: Jarek Poplawski <jarkao2@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/fib_trie.c