diff options
Diffstat (limited to 'net/ipv6/ip6_fib.c')
| -rw-r--r-- | net/ipv6/ip6_fib.c | 20 | 
1 files changed, 11 insertions, 9 deletions
diff --git a/net/ipv6/ip6_fib.c b/net/ipv6/ip6_fib.c index 7548905e79e..4076a0b14b2 100644 --- a/net/ipv6/ip6_fib.c +++ b/net/ipv6/ip6_fib.c @@ -134,9 +134,9 @@ static __inline__ u32 fib6_new_sernum(void)  # define BITOP_BE32_SWIZZLE	0  #endif -static __inline__ __be32 addr_bit_set(void *token, int fn_bit) +static __inline__ __be32 addr_bit_set(const void *token, int fn_bit)  { -	__be32 *addr = token; +	const __be32 *addr = token;  	/*  	 * Here,  	 * 	1 << ((~fn_bit ^ BITOP_BE32_SWIZZLE) & 0x1f) @@ -394,10 +394,11 @@ static int inet6_dump_fib(struct sk_buff *skb, struct netlink_callback *cb)  	arg.net = net;  	w->args = &arg; +	rcu_read_lock();  	for (h = s_h; h < FIB6_TABLE_HASHSZ; h++, s_e = 0) {  		e = 0;  		head = &net->ipv6.fib_table_hash[h]; -		hlist_for_each_entry(tb, node, head, tb6_hlist) { +		hlist_for_each_entry_rcu(tb, node, head, tb6_hlist) {  			if (e < s_e)  				goto next;  			res = fib6_dump_table(tb, skb, cb); @@ -408,6 +409,7 @@ next:  		}  	}  out: +	rcu_read_unlock();  	cb->args[1] = e;  	cb->args[0] = h; @@ -822,7 +824,7 @@ st_failure:  struct lookup_args {  	int		offset;		/* key offset on rt6_info	*/ -	struct in6_addr	*addr;		/* search key			*/ +	const struct in6_addr	*addr;		/* search key			*/  };  static struct fib6_node * fib6_lookup_1(struct fib6_node *root, @@ -881,8 +883,8 @@ static struct fib6_node * fib6_lookup_1(struct fib6_node *root,  	return NULL;  } -struct fib6_node * fib6_lookup(struct fib6_node *root, struct in6_addr *daddr, -			       struct in6_addr *saddr) +struct fib6_node * fib6_lookup(struct fib6_node *root, const struct in6_addr *daddr, +			       const struct in6_addr *saddr)  {  	struct fib6_node *fn;  	struct lookup_args args[] = { @@ -916,7 +918,7 @@ struct fib6_node * fib6_lookup(struct fib6_node *root, struct in6_addr *daddr,  static struct fib6_node * fib6_locate_1(struct fib6_node *root, -					struct in6_addr *addr, +					const struct in6_addr *addr,  					int plen, int offset)  {  	struct fib6_node *fn; @@ -946,8 +948,8 @@ static struct fib6_node * fib6_locate_1(struct fib6_node *root,  }  struct fib6_node * fib6_locate(struct fib6_node *root, -			       struct in6_addr *daddr, int dst_len, -			       struct in6_addr *saddr, int src_len) +			       const struct in6_addr *daddr, int dst_len, +			       const struct in6_addr *saddr, int src_len)  {  	struct fib6_node *fn;  |