diff options
Diffstat (limited to 'net/ipv4/fib_trie.c')
| -rw-r--r-- | net/ipv4/fib_trie.c | 28 | 
1 files changed, 11 insertions, 17 deletions
diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c index 3df6d3edb2a..5afeb5aa4c7 100644 --- a/net/ipv4/fib_trie.c +++ b/net/ipv4/fib_trie.c @@ -762,12 +762,9 @@ static struct tnode *inflate(struct trie *t, struct tnode *tn)  		if (IS_LEAF(node) || ((struct tnode *) node)->pos >  		   tn->pos + tn->bits - 1) { -			if (tkey_extract_bits(node->key, -					      oldtnode->pos + oldtnode->bits, -					      1) == 0) -				put_child(tn, 2*i, node); -			else -				put_child(tn, 2*i+1, node); +			put_child(tn, +				tkey_extract_bits(node->key, oldtnode->pos, oldtnode->bits + 1), +				node);  			continue;  		} @@ -1120,12 +1117,8 @@ static struct list_head *fib_insert_node(struct trie *t, u32 key, int plen)  		 *  first tnode need some special handling  		 */ -		if (tp) -			pos = tp->pos+tp->bits; -		else -			pos = 0; -  		if (n) { +			pos = tp ? tp->pos+tp->bits : 0;  			newpos = tkey_mismatch(key, pos, n->key);  			tn = tnode_new(n->key, newpos, 1);  		} else { @@ -2530,16 +2523,17 @@ 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 int flags = fib_flag_trans(fa->fa_type, mask, fi); -			int len;  			if (fa->fa_type == RTN_BROADCAST  			    || fa->fa_type == RTN_MULTICAST)  				continue; +			seq_setwidth(seq, 127); +  			if (fi)  				seq_printf(seq,  					 "%s\t%08X\t%08X\t%04X\t%d\t%u\t" -					 "%d\t%08X\t%d\t%u\t%u%n", +					 "%d\t%08X\t%d\t%u\t%u",  					 fi->fib_dev ? fi->fib_dev->name : "*",  					 prefix,  					 fi->fib_nh->nh_gw, flags, 0, 0, @@ -2548,15 +2542,15 @@ static int fib_route_seq_show(struct seq_file *seq, void *v)  					 (fi->fib_advmss ?  					  fi->fib_advmss + 40 : 0),  					 fi->fib_window, -					 fi->fib_rtt >> 3, &len); +					 fi->fib_rtt >> 3);  			else  				seq_printf(seq,  					 "*\t%08X\t%08X\t%04X\t%d\t%u\t" -					 "%d\t%08X\t%d\t%u\t%u%n", +					 "%d\t%08X\t%d\t%u\t%u",  					 prefix, 0, flags, 0, 0, 0, -					 mask, 0, 0, 0, &len); +					 mask, 0, 0, 0); -			seq_printf(seq, "%*s\n", 127 - len, ""); +			seq_pad(seq, '\n');  		}  	}  | 
