ipv4: Elide fib_validate_source() completely when possible.
authorDavid S. Miller <davem@davemloft.net>
Fri, 29 Jun 2012 08:32:45 +0000 (01:32 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 29 Jun 2012 08:36:36 +0000 (01:36 -0700)
commit7a9bc9b81a5bc6e44ebc80ef781332e4385083f2
tree1342c672823d47bfb112fee63951af9f6a3eb590
parentb8c8430726e5bd552e01dacc5a44f3f83f7446ca
ipv4: Elide fib_validate_source() completely when possible.

If rpfilter is off (or the SKB has an IPSEC path) and there are not
tclassid users, we don't have to do anything at all when
fib_validate_source() is invoked besides setting the itag to zero.

We monitor tclassid uses with a counter (modified only under RTNL and
marked __read_mostly) and we protect the fib_validate_source() real
work with a test against this counter and whether rpfilter is to be
done.

Having a way to know whether we need no tclassid processing or not
also opens the door for future optimized rpfilter algorithms that do
not perform full FIB lookups.

Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/fib_rules.h
include/net/ip_fib.h
net/core/fib_rules.c
net/ipv4/fib_frontend.c
net/ipv4/fib_rules.c
net/ipv4/fib_semantics.c