Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=1328042e268c936189f15eba5bd9a5a4605a8581
Commit:     1328042e268c936189f15eba5bd9a5a4605a8581
Parent:     936722922f6d2366378de606a40c14f96915474d
Author:     Stephen Hemminger <[EMAIL PROTECTED]>
AuthorDate: Tue Jan 22 21:54:37 2008 -0800
Committer:  David S. Miller <[EMAIL PROTECTED]>
CommitDate: Mon Jan 28 15:10:58 2008 -0800

    [IPV4] fib_trie: use hash list
    
    The code to dump can use the existing hash chain rather than doing
    repeated lookup.
    
    Signed-off-by: Stephen Hemminger <[EMAIL PROTECTED]>
    Signed-off-by: David S. Miller <[EMAIL PROTECTED]>
---
 net/ipv4/fib_trie.c |   49 ++++++++++++++++++++++++-------------------------
 1 files changed, 24 insertions(+), 25 deletions(-)

diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c
index 1a9231f..c19d685 100644
--- a/net/ipv4/fib_trie.c
+++ b/net/ipv4/fib_trie.c
@@ -2399,31 +2399,30 @@ static int fib_trie_seq_show(struct seq_file *seq, void 
*v)
 
        } else {
                struct leaf *l = (struct leaf *) n;
-               int i;
+               struct leaf_info *li;
+               struct hlist_node *node;
+
                __be32 val = htonl(l->key);
 
                seq_indent(seq, iter->depth);
                seq_printf(seq, "  |-- %d.%d.%d.%d\n", NIPQUAD(val));
-               for (i = 32; i >= 0; i--) {
-                       struct leaf_info *li = find_leaf_info(l, i);
-
-                       if (li) {
-                               struct fib_alias *fa;
-
-                               list_for_each_entry_rcu(fa, &li->falh, fa_list) 
{
-                                       char buf1[32], buf2[32];
-
-                                       seq_indent(seq, iter->depth+1);
-                                       seq_printf(seq, "  /%d %s %s", i,
-                                                  rtn_scope(buf1, sizeof(buf1),
-                                                            fa->fa_scope),
-                                                  rtn_type(buf2, sizeof(buf2),
-                                                            fa->fa_type));
-                                       if (fa->fa_tos)
-                                               seq_printf(seq, "tos =%d\n",
-                                                          fa->fa_tos);
-                                       seq_putc(seq, '\n');
-                               }
+
+               hlist_for_each_entry_rcu(li, node, &l->list, hlist) {
+                       struct fib_alias *fa;
+
+                       list_for_each_entry_rcu(fa, &li->falh, fa_list) {
+                               char buf1[32], buf2[32];
+
+                               seq_indent(seq, iter->depth+1);
+                               seq_printf(seq, "  /%d %s %s", li->plen,
+                                          rtn_scope(buf1, sizeof(buf1),
+                                                    fa->fa_scope),
+                                          rtn_type(buf2, sizeof(buf2),
+                                                   fa->fa_type));
+                               if (fa->fa_tos)
+                                       seq_printf(seq, "tos =%d\n",
+                                                  fa->fa_tos);
+                               seq_putc(seq, '\n');
                        }
                }
        }
@@ -2477,8 +2476,8 @@ static int fib_route_seq_show(struct seq_file *seq, void 
*v)
 {
        const struct fib_trie_iter *iter = seq->private;
        struct leaf *l = v;
-       int i;
-       char bf[128];
+       struct leaf_info *li;
+       struct hlist_node *node;
 
        if (v == SEQ_START_TOKEN) {
                seq_printf(seq, "%-127s\n", "Iface\tDestination\tGateway "
@@ -2493,8 +2492,7 @@ static int fib_route_seq_show(struct seq_file *seq, void 
*v)
        if (IS_TNODE(l))
                return 0;
 
-       for (i = 32; i >= 0; i--) {
-               struct leaf_info *li = find_leaf_info(l, i);
+       hlist_for_each_entry_rcu(li, node, &l->list, hlist) {
                struct fib_alias *fa;
                __be32 mask, prefix;
 
@@ -2507,6 +2505,7 @@ static int fib_route_seq_show(struct seq_file *seq, void 
*v)
                list_for_each_entry_rcu(fa, &li->falh, fa_list) {
                        const struct fib_info *fi = fa->fa_info;
                        unsigned flags = fib_flag_trans(fa->fa_type, mask, fi);
+                       char bf[128];
 
                        if (fa->fa_type == RTN_BROADCAST
                            || fa->fa_type == RTN_MULTICAST)
-
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