On Tue, Mar 27, 2007 at 03:21:59PM +0200, Thomas Graf wrote: > The results of FIB rules lookups are cached in the routing cache > except for IPv6 as no such cache exists. So far, it was the > responsibility of the user to flush the cache after modifying any > rules. This lead to many false bug reports due to misunderstanding > of this concept. > > This patch automatically flushes the route cache after inserting > or deleting a rule. > > Signed-off-by: Thomas Graf <[EMAIL PROTECTED]> > > Index: net-2.6.22/include/net/fib_rules.h > =================================================================== > --- net-2.6.22.orig/include/net/fib_rules.h 2007-03-27 13:54:52.000000000 > +0200 > +++ net-2.6.22/include/net/fib_rules.h 2007-03-27 14:16:24.000000000 > +0200 > @@ -59,6 +59,10 @@ struct fib_rules_ops > u32 (*default_pref)(void); > size_t (*nlmsg_payload)(struct fib_rule *); > > + /* Called after modifications to the rules set, must flush > + * the route cache if one exists. */ > + void (*flush_cache)(void); > + > int nlgroup; > struct nla_policy *policy; > struct list_head *rules_list; > Index: net-2.6.22/net/core/fib_rules.c > =================================================================== > --- net-2.6.22.orig/net/core/fib_rules.c 2007-03-27 13:53:29.000000000 > +0200 > +++ net-2.6.22/net/core/fib_rules.c 2007-03-27 13:59:20.000000000 +0200 > @@ -44,6 +44,12 @@ static void rules_ops_put(struct fib_rul > module_put(ops->owner); > } > > +static void flush_route_cache(struct fib_rules_ops *ops) > +{ > + if (ops->flush_cache) > + ops->flush_cache(); > +} > + > int fib_rules_register(struct fib_rules_ops *ops) > { > int err = -EEXIST; > @@ -315,6 +321,7 @@ static int fib_nl_newrule(struct sk_buff > > notify_rule_change(RTM_NEWRULE, rule, ops, nlh, NETLINK_CB(skb).pid); > rules_ops_put(ops); > + flush_route_cache(ops); > return 0; > > errout_free: > @@ -405,6 +412,7 @@ static int fib_nl_delrule(struct sk_buff > NETLINK_CB(skb).pid); > fib_rule_put(rule); > rules_ops_put(ops); > + flush_route_cache(ops); > return 0; > }
That looks like a bug - shouldn't we flush the cache first, then do the rules_ops_put()? Cheers, Muli - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html