Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=971b893e79db0f7dccfcea15dbdebca3ca64a84d
Commit:     971b893e79db0f7dccfcea15dbdebca3ca64a84d
Parent:     a2bbe6822f8928e254452765c07cb863633113b8
Author:     Denis V. Lunev <[EMAIL PROTECTED]>
AuthorDate: Sat Dec 8 00:32:23 2007 -0800
Committer:  David S. Miller <[EMAIL PROTECTED]>
CommitDate: Mon Jan 28 14:57:01 2008 -0800

    [IPV4]: last default route is a fib table property
    
    Signed-off-by: Denis V. Lunev <[EMAIL PROTECTED]>
    Acked-by: Alexey Kuznetsov <[EMAIL PROTECTED]>
    Signed-off-by: David S. Miller <[EMAIL PROTECTED]>
---
 include/net/ip_fib.h |    1 +
 net/ipv4/fib_hash.c  |   16 ++++++++--------
 net/ipv4/fib_trie.c  |   18 +++++++++---------
 3 files changed, 18 insertions(+), 17 deletions(-)

diff --git a/include/net/ip_fib.h b/include/net/ip_fib.h
index 690fb4d..d70b9b4 100644
--- a/include/net/ip_fib.h
+++ b/include/net/ip_fib.h
@@ -141,6 +141,7 @@ struct fib_table {
        struct hlist_node tb_hlist;
        u32             tb_id;
        unsigned        tb_stamp;
+       int             tb_default;
        int             (*tb_lookup)(struct fib_table *tb, const struct flowi 
*flp, struct fib_result *res);
        int             (*tb_insert)(struct fib_table *, struct fib_config *);
        int             (*tb_delete)(struct fib_table *, struct fib_config *);
diff --git a/net/ipv4/fib_hash.c b/net/ipv4/fib_hash.c
index 86087d4..9d54041 100644
--- a/net/ipv4/fib_hash.c
+++ b/net/ipv4/fib_hash.c
@@ -272,8 +272,6 @@ out:
        return err;
 }
 
-static int fn_hash_last_dflt=-1;
-
 static void
 fn_hash_select_default(struct fib_table *tb, const struct flowi *flp, struct 
fib_result *res)
 {
@@ -314,9 +312,9 @@ fn_hash_select_default(struct fib_table *tb, const struct 
flowi *flp, struct fib
                                if (next_fi != res->fi)
                                        break;
                        } else if (!fib_detect_death(fi, order, &last_resort,
-                                                    &last_idx, 
fn_hash_last_dflt)) {
+                                               &last_idx, tb->tb_default)) {
                                fib_result_assign(res, fi);
-                               fn_hash_last_dflt = order;
+                               tb->tb_default = order;
                                goto out;
                        }
                        fi = next_fi;
@@ -325,19 +323,20 @@ fn_hash_select_default(struct fib_table *tb, const struct 
flowi *flp, struct fib
        }
 
        if (order <= 0 || fi == NULL) {
-               fn_hash_last_dflt = -1;
+               tb->tb_default = -1;
                goto out;
        }
 
-       if (!fib_detect_death(fi, order, &last_resort, &last_idx, 
fn_hash_last_dflt)) {
+       if (!fib_detect_death(fi, order, &last_resort, &last_idx,
+                               tb->tb_default)) {
                fib_result_assign(res, fi);
-               fn_hash_last_dflt = order;
+               tb->tb_default = order;
                goto out;
        }
 
        if (last_idx >= 0)
                fib_result_assign(res, last_resort);
-       fn_hash_last_dflt = last_idx;
+       tb->tb_default = last_idx;
 out:
        read_unlock(&fib_hash_lock);
 }
@@ -773,6 +772,7 @@ struct fib_table * __init fib_hash_init(u32 id)
                return NULL;
 
        tb->tb_id = id;
+       tb->tb_default = -1;
        tb->tb_lookup = fn_hash_lookup;
        tb->tb_insert = fn_hash_insert;
        tb->tb_delete = fn_hash_delete;
diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c
index c7c5c6c..9126eea 100644
--- a/net/ipv4/fib_trie.c
+++ b/net/ipv4/fib_trie.c
@@ -1782,8 +1782,6 @@ static int fn_trie_flush(struct fib_table *tb)
        return found;
 }
 
-static int trie_last_dflt = -1;
-
 static void
 fn_trie_select_default(struct fib_table *tb, const struct flowi *flp, struct 
fib_result *res)
 {
@@ -1830,28 +1828,29 @@ fn_trie_select_default(struct fib_table *tb, const 
struct flowi *flp, struct fib
                        if (next_fi != res->fi)
                                break;
                } else if (!fib_detect_death(fi, order, &last_resort,
-                                            &last_idx, trie_last_dflt)) {
+                                            &last_idx, tb->tb_default)) {
                        fib_result_assign(res, fi);
-                       trie_last_dflt = order;
+                       tb->tb_default = order;
                        goto out;
                }
                fi = next_fi;
                order++;
        }
        if (order <= 0 || fi == NULL) {
-               trie_last_dflt = -1;
+               tb->tb_default = -1;
                goto out;
        }
 
-       if (!fib_detect_death(fi, order, &last_resort, &last_idx, 
trie_last_dflt)) {
+       if (!fib_detect_death(fi, order, &last_resort, &last_idx,
+                               tb->tb_default)) {
                fib_result_assign(res, fi);
-               trie_last_dflt = order;
+               tb->tb_default = order;
                goto out;
        }
        if (last_idx >= 0)
                fib_result_assign(res, last_resort);
-       trie_last_dflt = last_idx;
- out:;
+       tb->tb_default = last_idx;
+out:
        rcu_read_unlock();
 }
 
@@ -1978,6 +1977,7 @@ struct fib_table * __init fib_hash_init(u32 id)
                return NULL;
 
        tb->tb_id = id;
+       tb->tb_default = -1;
        tb->tb_lookup = fn_trie_lookup;
        tb->tb_insert = fn_trie_insert;
        tb->tb_delete = fn_trie_delete;
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to