]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - include/net/ip_fib.h
fib: RCU conversion of fib_lookup()
[net-next-2.6.git] / include / net / ip_fib.h
index c93f94edc610fc440f38ca5f191b7b6c7e7dd72c..ba3666d31766864b354687cc543d9ba3a365193d 100644 (file)
@@ -86,6 +86,7 @@ struct fib_info {
 #ifdef CONFIG_IP_ROUTE_MULTIPATH
        int                     fib_power;
 #endif
+       struct rcu_head         rcu;
        struct fib_nh           fib_nh[0];
 #define fib_dev                fib_nh[0].nh_dev
 };
@@ -148,7 +149,7 @@ struct fib_table {
 };
 
 extern int fib_table_lookup(struct fib_table *tb, const struct flowi *flp,
-                           struct fib_result *res);
+                           struct fib_result *res, int fib_flags);
 extern int fib_table_insert(struct fib_table *, struct fib_config *);
 extern int fib_table_delete(struct fib_table *, struct fib_config *);
 extern int fib_table_dump(struct fib_table *table, struct sk_buff *skb,
@@ -185,11 +186,11 @@ static inline int fib_lookup(struct net *net, const struct flowi *flp,
        struct fib_table *table;
 
        table = fib_get_table(net, RT_TABLE_LOCAL);
-       if (!fib_table_lookup(table, flp, res))
+       if (!fib_table_lookup(table, flp, res, FIB_LOOKUP_NOREF))
                return 0;
 
        table = fib_get_table(net, RT_TABLE_MAIN);
-       if (!fib_table_lookup(table, flp, res))
+       if (!fib_table_lookup(table, flp, res, FIB_LOOKUP_NOREF))
                return 0;
        return -ENETUNREACH;
 }
@@ -254,16 +255,6 @@ static inline void fib_info_put(struct fib_info *fi)
                free_fib_info(fi);
 }
 
-static inline void fib_res_put(struct fib_result *res)
-{
-       if (res->fi)
-               fib_info_put(res->fi);
-#ifdef CONFIG_IP_MULTIPLE_TABLES
-       if (res->r)
-               fib_rule_put(res->r);
-#endif
-}
-
 #ifdef CONFIG_PROC_FS
 extern int __net_init  fib_proc_init(struct net *net);
 extern void __net_exit fib_proc_exit(struct net *net);