mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	rcu: convert uses of rcu_assign_pointer(x, NULL) to RCU_INIT_POINTER
When assigning a NULL value to an RCU protected pointer, no barrier is needed. The rcu_assign_pointer, used to handle that but will soon change to not handle the special case. Convert all rcu_assign_pointer of NULL value. //smpl @@ expression P; @@ - rcu_assign_pointer(P, NULL) + RCU_INIT_POINTER(P, NULL) // </smpl> Signed-off-by: Stephen Hemminger <shemminger@vyatta.com> Acked-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									76f793e3a4
								
							
						
					
					
						commit
						a9b3cd7f32
					
				
					 55 changed files with 193 additions and 193 deletions
				
			
		| 
						 | 
					@ -553,7 +553,7 @@ static void garp_release_port(struct net_device *dev)
 | 
				
			||||||
		if (rtnl_dereference(port->applicants[i]))
 | 
							if (rtnl_dereference(port->applicants[i]))
 | 
				
			||||||
			return;
 | 
								return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	rcu_assign_pointer(dev->garp_port, NULL);
 | 
						RCU_INIT_POINTER(dev->garp_port, NULL);
 | 
				
			||||||
	kfree_rcu(port, rcu);
 | 
						kfree_rcu(port, rcu);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -605,7 +605,7 @@ void garp_uninit_applicant(struct net_device *dev, struct garp_application *appl
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ASSERT_RTNL();
 | 
						ASSERT_RTNL();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rcu_assign_pointer(port->applicants[appl->type], NULL);
 | 
						RCU_INIT_POINTER(port->applicants[appl->type], NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Delete timer and generate a final TRANSMIT_PDU event to flush out
 | 
						/* Delete timer and generate a final TRANSMIT_PDU event to flush out
 | 
				
			||||||
	 * all pending messages before the applicant is gone. */
 | 
						 * all pending messages before the applicant is gone. */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -88,9 +88,9 @@ void stp_proto_unregister(const struct stp_proto *proto)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	mutex_lock(&stp_proto_mutex);
 | 
						mutex_lock(&stp_proto_mutex);
 | 
				
			||||||
	if (is_zero_ether_addr(proto->group_address))
 | 
						if (is_zero_ether_addr(proto->group_address))
 | 
				
			||||||
		rcu_assign_pointer(stp_proto, NULL);
 | 
							RCU_INIT_POINTER(stp_proto, NULL);
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		rcu_assign_pointer(garp_protos[proto->group_address[5] -
 | 
							RCU_INIT_POINTER(garp_protos[proto->group_address[5] -
 | 
				
			||||||
					       GARP_ADDR_MIN], NULL);
 | 
										       GARP_ADDR_MIN], NULL);
 | 
				
			||||||
	synchronize_rcu();
 | 
						synchronize_rcu();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -133,7 +133,7 @@ void unregister_vlan_dev(struct net_device *dev, struct list_head *head)
 | 
				
			||||||
	if (grp->nr_vlans == 0) {
 | 
						if (grp->nr_vlans == 0) {
 | 
				
			||||||
		vlan_gvrp_uninit_applicant(real_dev);
 | 
							vlan_gvrp_uninit_applicant(real_dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		rcu_assign_pointer(real_dev->vlgrp, NULL);
 | 
							RCU_INIT_POINTER(real_dev->vlgrp, NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* Free the group, after all cpu's are done. */
 | 
							/* Free the group, after all cpu's are done. */
 | 
				
			||||||
		call_rcu(&grp->rcu, vlan_rcu_free);
 | 
							call_rcu(&grp->rcu, vlan_rcu_free);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -87,14 +87,14 @@ static int __init ebtable_broute_init(void)
 | 
				
			||||||
	if (ret < 0)
 | 
						if (ret < 0)
 | 
				
			||||||
		return ret;
 | 
							return ret;
 | 
				
			||||||
	/* see br_input.c */
 | 
						/* see br_input.c */
 | 
				
			||||||
	rcu_assign_pointer(br_should_route_hook,
 | 
						RCU_INIT_POINTER(br_should_route_hook,
 | 
				
			||||||
			   (br_should_route_hook_t *)ebt_broute);
 | 
								   (br_should_route_hook_t *)ebt_broute);
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void __exit ebtable_broute_fini(void)
 | 
					static void __exit ebtable_broute_fini(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	rcu_assign_pointer(br_should_route_hook, NULL);
 | 
						RCU_INIT_POINTER(br_should_route_hook, NULL);
 | 
				
			||||||
	synchronize_net();
 | 
						synchronize_net();
 | 
				
			||||||
	unregister_pernet_subsys(&broute_net_ops);
 | 
						unregister_pernet_subsys(&broute_net_ops);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -108,7 +108,7 @@ struct cflayer *cfmuxl_remove_dnlayer(struct cflayer *layr, u8 phyid)
 | 
				
			||||||
	int idx = phyid % DN_CACHE_SIZE;
 | 
						int idx = phyid % DN_CACHE_SIZE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	spin_lock_bh(&muxl->transmit_lock);
 | 
						spin_lock_bh(&muxl->transmit_lock);
 | 
				
			||||||
	rcu_assign_pointer(muxl->dn_cache[idx], NULL);
 | 
						RCU_INIT_POINTER(muxl->dn_cache[idx], NULL);
 | 
				
			||||||
	dn = get_from_id(&muxl->frml_list, phyid);
 | 
						dn = get_from_id(&muxl->frml_list, phyid);
 | 
				
			||||||
	if (dn == NULL)
 | 
						if (dn == NULL)
 | 
				
			||||||
		goto out;
 | 
							goto out;
 | 
				
			||||||
| 
						 | 
					@ -164,7 +164,7 @@ struct cflayer *cfmuxl_remove_uplayer(struct cflayer *layr, u8 id)
 | 
				
			||||||
	if (up == NULL)
 | 
						if (up == NULL)
 | 
				
			||||||
		goto out;
 | 
							goto out;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rcu_assign_pointer(muxl->up_cache[idx], NULL);
 | 
						RCU_INIT_POINTER(muxl->up_cache[idx], NULL);
 | 
				
			||||||
	list_del_rcu(&up->node);
 | 
						list_del_rcu(&up->node);
 | 
				
			||||||
out:
 | 
					out:
 | 
				
			||||||
	spin_unlock_bh(&muxl->receive_lock);
 | 
						spin_unlock_bh(&muxl->receive_lock);
 | 
				
			||||||
| 
						 | 
					@ -261,7 +261,7 @@ static void cfmuxl_ctrlcmd(struct cflayer *layr, enum caif_ctrlcmd ctrl,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				idx = layer->id % UP_CACHE_SIZE;
 | 
									idx = layer->id % UP_CACHE_SIZE;
 | 
				
			||||||
				spin_lock_bh(&muxl->receive_lock);
 | 
									spin_lock_bh(&muxl->receive_lock);
 | 
				
			||||||
				rcu_assign_pointer(muxl->up_cache[idx], NULL);
 | 
									RCU_INIT_POINTER(muxl->up_cache[idx], NULL);
 | 
				
			||||||
				list_del_rcu(&layer->node);
 | 
									list_del_rcu(&layer->node);
 | 
				
			||||||
				spin_unlock_bh(&muxl->receive_lock);
 | 
									spin_unlock_bh(&muxl->receive_lock);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -719,7 +719,7 @@ int can_proto_register(const struct can_proto *cp)
 | 
				
			||||||
		       proto);
 | 
							       proto);
 | 
				
			||||||
		err = -EBUSY;
 | 
							err = -EBUSY;
 | 
				
			||||||
	} else
 | 
						} else
 | 
				
			||||||
		rcu_assign_pointer(proto_tab[proto], cp);
 | 
							RCU_INIT_POINTER(proto_tab[proto], cp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	mutex_unlock(&proto_tab_lock);
 | 
						mutex_unlock(&proto_tab_lock);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -740,7 +740,7 @@ void can_proto_unregister(const struct can_proto *cp)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	mutex_lock(&proto_tab_lock);
 | 
						mutex_lock(&proto_tab_lock);
 | 
				
			||||||
	BUG_ON(proto_tab[proto] != cp);
 | 
						BUG_ON(proto_tab[proto] != cp);
 | 
				
			||||||
	rcu_assign_pointer(proto_tab[proto], NULL);
 | 
						RCU_INIT_POINTER(proto_tab[proto], NULL);
 | 
				
			||||||
	mutex_unlock(&proto_tab_lock);
 | 
						mutex_unlock(&proto_tab_lock);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	synchronize_rcu();
 | 
						synchronize_rcu();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3094,8 +3094,8 @@ void netdev_rx_handler_unregister(struct net_device *dev)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ASSERT_RTNL();
 | 
						ASSERT_RTNL();
 | 
				
			||||||
	rcu_assign_pointer(dev->rx_handler, NULL);
 | 
						RCU_INIT_POINTER(dev->rx_handler, NULL);
 | 
				
			||||||
	rcu_assign_pointer(dev->rx_handler_data, NULL);
 | 
						RCU_INIT_POINTER(dev->rx_handler_data, NULL);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
EXPORT_SYMBOL_GPL(netdev_rx_handler_unregister);
 | 
					EXPORT_SYMBOL_GPL(netdev_rx_handler_unregister);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -487,7 +487,7 @@ static int fib_nl_delrule(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg)
 | 
				
			||||||
		if (ops->nr_goto_rules > 0) {
 | 
							if (ops->nr_goto_rules > 0) {
 | 
				
			||||||
			list_for_each_entry(tmp, &ops->rules_list, list) {
 | 
								list_for_each_entry(tmp, &ops->rules_list, list) {
 | 
				
			||||||
				if (rtnl_dereference(tmp->ctarget) == rule) {
 | 
									if (rtnl_dereference(tmp->ctarget) == rule) {
 | 
				
			||||||
					rcu_assign_pointer(tmp->ctarget, NULL);
 | 
										RCU_INIT_POINTER(tmp->ctarget, NULL);
 | 
				
			||||||
					ops->unresolved_rules++;
 | 
										ops->unresolved_rules++;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -645,7 +645,7 @@ int sk_detach_filter(struct sock *sk)
 | 
				
			||||||
	filter = rcu_dereference_protected(sk->sk_filter,
 | 
						filter = rcu_dereference_protected(sk->sk_filter,
 | 
				
			||||||
					   sock_owned_by_user(sk));
 | 
										   sock_owned_by_user(sk));
 | 
				
			||||||
	if (filter) {
 | 
						if (filter) {
 | 
				
			||||||
		rcu_assign_pointer(sk->sk_filter, NULL);
 | 
							RCU_INIT_POINTER(sk->sk_filter, NULL);
 | 
				
			||||||
		sk_filter_uncharge(sk, filter);
 | 
							sk_filter_uncharge(sk, filter);
 | 
				
			||||||
		ret = 0;
 | 
							ret = 0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -987,10 +987,10 @@ static ssize_t store_xps_map(struct netdev_queue *queue,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (nonempty)
 | 
						if (nonempty)
 | 
				
			||||||
		rcu_assign_pointer(dev->xps_maps, new_dev_maps);
 | 
							RCU_INIT_POINTER(dev->xps_maps, new_dev_maps);
 | 
				
			||||||
	else {
 | 
						else {
 | 
				
			||||||
		kfree(new_dev_maps);
 | 
							kfree(new_dev_maps);
 | 
				
			||||||
		rcu_assign_pointer(dev->xps_maps, NULL);
 | 
							RCU_INIT_POINTER(dev->xps_maps, NULL);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (dev_maps)
 | 
						if (dev_maps)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -760,7 +760,7 @@ int __netpoll_setup(struct netpoll *np)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* last thing to do is link it to the net device structure */
 | 
						/* last thing to do is link it to the net device structure */
 | 
				
			||||||
	rcu_assign_pointer(ndev->npinfo, npinfo);
 | 
						RCU_INIT_POINTER(ndev->npinfo, npinfo);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -901,7 +901,7 @@ void __netpoll_cleanup(struct netpoll *np)
 | 
				
			||||||
		if (ops->ndo_netpoll_cleanup)
 | 
							if (ops->ndo_netpoll_cleanup)
 | 
				
			||||||
			ops->ndo_netpoll_cleanup(np->dev);
 | 
								ops->ndo_netpoll_cleanup(np->dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		rcu_assign_pointer(np->dev->npinfo, NULL);
 | 
							RCU_INIT_POINTER(np->dev->npinfo, NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* avoid racing with NAPI reading npinfo */
 | 
							/* avoid racing with NAPI reading npinfo */
 | 
				
			||||||
		synchronize_rcu_bh();
 | 
							synchronize_rcu_bh();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -387,7 +387,7 @@ struct dst_entry *__sk_dst_check(struct sock *sk, u32 cookie)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (dst && dst->obsolete && dst->ops->check(dst, cookie) == NULL) {
 | 
						if (dst && dst->obsolete && dst->ops->check(dst, cookie) == NULL) {
 | 
				
			||||||
		sk_tx_queue_clear(sk);
 | 
							sk_tx_queue_clear(sk);
 | 
				
			||||||
		rcu_assign_pointer(sk->sk_dst_cache, NULL);
 | 
							RCU_INIT_POINTER(sk->sk_dst_cache, NULL);
 | 
				
			||||||
		dst_release(dst);
 | 
							dst_release(dst);
 | 
				
			||||||
		return NULL;
 | 
							return NULL;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -1158,7 +1158,7 @@ static void __sk_free(struct sock *sk)
 | 
				
			||||||
				       atomic_read(&sk->sk_wmem_alloc) == 0);
 | 
									       atomic_read(&sk->sk_wmem_alloc) == 0);
 | 
				
			||||||
	if (filter) {
 | 
						if (filter) {
 | 
				
			||||||
		sk_filter_uncharge(sk, filter);
 | 
							sk_filter_uncharge(sk, filter);
 | 
				
			||||||
		rcu_assign_pointer(sk->sk_filter, NULL);
 | 
							RCU_INIT_POINTER(sk->sk_filter, NULL);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sock_disable_timestamp(sk, SOCK_TIMESTAMP);
 | 
						sock_disable_timestamp(sk, SOCK_TIMESTAMP);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -388,7 +388,7 @@ static int dn_dev_insert_ifa(struct dn_dev *dn_db, struct dn_ifaddr *ifa)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ifa->ifa_next = dn_db->ifa_list;
 | 
						ifa->ifa_next = dn_db->ifa_list;
 | 
				
			||||||
	rcu_assign_pointer(dn_db->ifa_list, ifa);
 | 
						RCU_INIT_POINTER(dn_db->ifa_list, ifa);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	dn_ifaddr_notify(RTM_NEWADDR, ifa);
 | 
						dn_ifaddr_notify(RTM_NEWADDR, ifa);
 | 
				
			||||||
	blocking_notifier_call_chain(&dnaddr_chain, NETDEV_UP, ifa);
 | 
						blocking_notifier_call_chain(&dnaddr_chain, NETDEV_UP, ifa);
 | 
				
			||||||
| 
						 | 
					@ -1093,7 +1093,7 @@ static struct dn_dev *dn_dev_create(struct net_device *dev, int *err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	memcpy(&dn_db->parms, p, sizeof(struct dn_dev_parms));
 | 
						memcpy(&dn_db->parms, p, sizeof(struct dn_dev_parms));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rcu_assign_pointer(dev->dn_ptr, dn_db);
 | 
						RCU_INIT_POINTER(dev->dn_ptr, dn_db);
 | 
				
			||||||
	dn_db->dev = dev;
 | 
						dn_db->dev = dev;
 | 
				
			||||||
	init_timer(&dn_db->timer);
 | 
						init_timer(&dn_db->timer);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1101,7 +1101,7 @@ static struct dn_dev *dn_dev_create(struct net_device *dev, int *err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	dn_db->neigh_parms = neigh_parms_alloc(dev, &dn_neigh_table);
 | 
						dn_db->neigh_parms = neigh_parms_alloc(dev, &dn_neigh_table);
 | 
				
			||||||
	if (!dn_db->neigh_parms) {
 | 
						if (!dn_db->neigh_parms) {
 | 
				
			||||||
		rcu_assign_pointer(dev->dn_ptr, NULL);
 | 
							RCU_INIT_POINTER(dev->dn_ptr, NULL);
 | 
				
			||||||
		kfree(dn_db);
 | 
							kfree(dn_db);
 | 
				
			||||||
		return NULL;
 | 
							return NULL;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -258,7 +258,7 @@ static struct in_device *inetdev_init(struct net_device *dev)
 | 
				
			||||||
		ip_mc_up(in_dev);
 | 
							ip_mc_up(in_dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* we can receive as soon as ip_ptr is set -- do this last */
 | 
						/* we can receive as soon as ip_ptr is set -- do this last */
 | 
				
			||||||
	rcu_assign_pointer(dev->ip_ptr, in_dev);
 | 
						RCU_INIT_POINTER(dev->ip_ptr, in_dev);
 | 
				
			||||||
out:
 | 
					out:
 | 
				
			||||||
	return in_dev;
 | 
						return in_dev;
 | 
				
			||||||
out_kfree:
 | 
					out_kfree:
 | 
				
			||||||
| 
						 | 
					@ -291,7 +291,7 @@ static void inetdev_destroy(struct in_device *in_dev)
 | 
				
			||||||
		inet_free_ifa(ifa);
 | 
							inet_free_ifa(ifa);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rcu_assign_pointer(dev->ip_ptr, NULL);
 | 
						RCU_INIT_POINTER(dev->ip_ptr, NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	devinet_sysctl_unregister(in_dev);
 | 
						devinet_sysctl_unregister(in_dev);
 | 
				
			||||||
	neigh_parms_release(&arp_tbl, in_dev->arp_parms);
 | 
						neigh_parms_release(&arp_tbl, in_dev->arp_parms);
 | 
				
			||||||
| 
						 | 
					@ -1175,7 +1175,7 @@ static int inetdev_event(struct notifier_block *this, unsigned long event,
 | 
				
			||||||
	switch (event) {
 | 
						switch (event) {
 | 
				
			||||||
	case NETDEV_REGISTER:
 | 
						case NETDEV_REGISTER:
 | 
				
			||||||
		printk(KERN_DEBUG "inetdev_event: bug\n");
 | 
							printk(KERN_DEBUG "inetdev_event: bug\n");
 | 
				
			||||||
		rcu_assign_pointer(dev->ip_ptr, NULL);
 | 
							RCU_INIT_POINTER(dev->ip_ptr, NULL);
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case NETDEV_UP:
 | 
						case NETDEV_UP:
 | 
				
			||||||
		if (!inetdev_valid_mtu(dev->mtu))
 | 
							if (!inetdev_valid_mtu(dev->mtu))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -204,7 +204,7 @@ static inline struct tnode *node_parent_rcu(const struct rt_trie_node *node)
 | 
				
			||||||
	return (struct tnode *)(parent & ~NODE_TYPE_MASK);
 | 
						return (struct tnode *)(parent & ~NODE_TYPE_MASK);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Same as rcu_assign_pointer
 | 
					/* Same as RCU_INIT_POINTER
 | 
				
			||||||
 * but that macro() assumes that value is a pointer.
 | 
					 * but that macro() assumes that value is a pointer.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static inline void node_set_parent(struct rt_trie_node *node, struct tnode *ptr)
 | 
					static inline void node_set_parent(struct rt_trie_node *node, struct tnode *ptr)
 | 
				
			||||||
| 
						 | 
					@ -528,7 +528,7 @@ static void tnode_put_child_reorg(struct tnode *tn, int i, struct rt_trie_node *
 | 
				
			||||||
	if (n)
 | 
						if (n)
 | 
				
			||||||
		node_set_parent(n, tn);
 | 
							node_set_parent(n, tn);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rcu_assign_pointer(tn->child[i], n);
 | 
						RCU_INIT_POINTER(tn->child[i], n);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define MAX_WORK 10
 | 
					#define MAX_WORK 10
 | 
				
			||||||
| 
						 | 
					@ -1014,7 +1014,7 @@ static void trie_rebalance(struct trie *t, struct tnode *tn)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		tp = node_parent((struct rt_trie_node *) tn);
 | 
							tp = node_parent((struct rt_trie_node *) tn);
 | 
				
			||||||
		if (!tp)
 | 
							if (!tp)
 | 
				
			||||||
			rcu_assign_pointer(t->trie, (struct rt_trie_node *)tn);
 | 
								RCU_INIT_POINTER(t->trie, (struct rt_trie_node *)tn);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		tnode_free_flush();
 | 
							tnode_free_flush();
 | 
				
			||||||
		if (!tp)
 | 
							if (!tp)
 | 
				
			||||||
| 
						 | 
					@ -1026,7 +1026,7 @@ static void trie_rebalance(struct trie *t, struct tnode *tn)
 | 
				
			||||||
	if (IS_TNODE(tn))
 | 
						if (IS_TNODE(tn))
 | 
				
			||||||
		tn = (struct tnode *)resize(t, (struct tnode *)tn);
 | 
							tn = (struct tnode *)resize(t, (struct tnode *)tn);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rcu_assign_pointer(t->trie, (struct rt_trie_node *)tn);
 | 
						RCU_INIT_POINTER(t->trie, (struct rt_trie_node *)tn);
 | 
				
			||||||
	tnode_free_flush();
 | 
						tnode_free_flush();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1163,7 +1163,7 @@ static struct list_head *fib_insert_node(struct trie *t, u32 key, int plen)
 | 
				
			||||||
			put_child(t, (struct tnode *)tp, cindex,
 | 
								put_child(t, (struct tnode *)tp, cindex,
 | 
				
			||||||
				  (struct rt_trie_node *)tn);
 | 
									  (struct rt_trie_node *)tn);
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			rcu_assign_pointer(t->trie, (struct rt_trie_node *)tn);
 | 
								RCU_INIT_POINTER(t->trie, (struct rt_trie_node *)tn);
 | 
				
			||||||
			tp = tn;
 | 
								tp = tn;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -1621,7 +1621,7 @@ static void trie_leaf_remove(struct trie *t, struct leaf *l)
 | 
				
			||||||
		put_child(t, (struct tnode *)tp, cindex, NULL);
 | 
							put_child(t, (struct tnode *)tp, cindex, NULL);
 | 
				
			||||||
		trie_rebalance(t, tp);
 | 
							trie_rebalance(t, tp);
 | 
				
			||||||
	} else
 | 
						} else
 | 
				
			||||||
		rcu_assign_pointer(t->trie, NULL);
 | 
							RCU_INIT_POINTER(t->trie, NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	free_leaf(l);
 | 
						free_leaf(l);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -34,7 +34,7 @@ int gre_add_protocol(const struct gre_protocol *proto, u8 version)
 | 
				
			||||||
	if (gre_proto[version])
 | 
						if (gre_proto[version])
 | 
				
			||||||
		goto err_out_unlock;
 | 
							goto err_out_unlock;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rcu_assign_pointer(gre_proto[version], proto);
 | 
						RCU_INIT_POINTER(gre_proto[version], proto);
 | 
				
			||||||
	spin_unlock(&gre_proto_lock);
 | 
						spin_unlock(&gre_proto_lock);
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -54,7 +54,7 @@ int gre_del_protocol(const struct gre_protocol *proto, u8 version)
 | 
				
			||||||
	if (rcu_dereference_protected(gre_proto[version],
 | 
						if (rcu_dereference_protected(gre_proto[version],
 | 
				
			||||||
			lockdep_is_held(&gre_proto_lock)) != proto)
 | 
								lockdep_is_held(&gre_proto_lock)) != proto)
 | 
				
			||||||
		goto err_out_unlock;
 | 
							goto err_out_unlock;
 | 
				
			||||||
	rcu_assign_pointer(gre_proto[version], NULL);
 | 
						RCU_INIT_POINTER(gre_proto[version], NULL);
 | 
				
			||||||
	spin_unlock(&gre_proto_lock);
 | 
						spin_unlock(&gre_proto_lock);
 | 
				
			||||||
	synchronize_rcu();
 | 
						synchronize_rcu();
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1242,7 +1242,7 @@ void ip_mc_inc_group(struct in_device *in_dev, __be32 addr)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	im->next_rcu = in_dev->mc_list;
 | 
						im->next_rcu = in_dev->mc_list;
 | 
				
			||||||
	in_dev->mc_count++;
 | 
						in_dev->mc_count++;
 | 
				
			||||||
	rcu_assign_pointer(in_dev->mc_list, im);
 | 
						RCU_INIT_POINTER(in_dev->mc_list, im);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_IP_MULTICAST
 | 
					#ifdef CONFIG_IP_MULTICAST
 | 
				
			||||||
	igmpv3_del_delrec(in_dev, im->multiaddr);
 | 
						igmpv3_del_delrec(in_dev, im->multiaddr);
 | 
				
			||||||
| 
						 | 
					@ -1813,7 +1813,7 @@ int ip_mc_join_group(struct sock *sk , struct ip_mreqn *imr)
 | 
				
			||||||
	iml->next_rcu = inet->mc_list;
 | 
						iml->next_rcu = inet->mc_list;
 | 
				
			||||||
	iml->sflist = NULL;
 | 
						iml->sflist = NULL;
 | 
				
			||||||
	iml->sfmode = MCAST_EXCLUDE;
 | 
						iml->sfmode = MCAST_EXCLUDE;
 | 
				
			||||||
	rcu_assign_pointer(inet->mc_list, iml);
 | 
						RCU_INIT_POINTER(inet->mc_list, iml);
 | 
				
			||||||
	ip_mc_inc_group(in_dev, addr);
 | 
						ip_mc_inc_group(in_dev, addr);
 | 
				
			||||||
	err = 0;
 | 
						err = 0;
 | 
				
			||||||
done:
 | 
					done:
 | 
				
			||||||
| 
						 | 
					@ -1835,7 +1835,7 @@ static int ip_mc_leave_src(struct sock *sk, struct ip_mc_socklist *iml,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	err = ip_mc_del_src(in_dev, &iml->multi.imr_multiaddr.s_addr,
 | 
						err = ip_mc_del_src(in_dev, &iml->multi.imr_multiaddr.s_addr,
 | 
				
			||||||
			iml->sfmode, psf->sl_count, psf->sl_addr, 0);
 | 
								iml->sfmode, psf->sl_count, psf->sl_addr, 0);
 | 
				
			||||||
	rcu_assign_pointer(iml->sflist, NULL);
 | 
						RCU_INIT_POINTER(iml->sflist, NULL);
 | 
				
			||||||
	/* decrease mem now to avoid the memleak warning */
 | 
						/* decrease mem now to avoid the memleak warning */
 | 
				
			||||||
	atomic_sub(IP_SFLSIZE(psf->sl_max), &sk->sk_omem_alloc);
 | 
						atomic_sub(IP_SFLSIZE(psf->sl_max), &sk->sk_omem_alloc);
 | 
				
			||||||
	kfree_rcu(psf, rcu);
 | 
						kfree_rcu(psf, rcu);
 | 
				
			||||||
| 
						 | 
					@ -2000,7 +2000,7 @@ int ip_mc_source(int add, int omode, struct sock *sk, struct
 | 
				
			||||||
			atomic_sub(IP_SFLSIZE(psl->sl_max), &sk->sk_omem_alloc);
 | 
								atomic_sub(IP_SFLSIZE(psl->sl_max), &sk->sk_omem_alloc);
 | 
				
			||||||
			kfree_rcu(psl, rcu);
 | 
								kfree_rcu(psl, rcu);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		rcu_assign_pointer(pmc->sflist, newpsl);
 | 
							RCU_INIT_POINTER(pmc->sflist, newpsl);
 | 
				
			||||||
		psl = newpsl;
 | 
							psl = newpsl;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	rv = 1;	/* > 0 for insert logic below if sl_count is 0 */
 | 
						rv = 1;	/* > 0 for insert logic below if sl_count is 0 */
 | 
				
			||||||
| 
						 | 
					@ -2103,7 +2103,7 @@ int ip_mc_msfilter(struct sock *sk, struct ip_msfilter *msf, int ifindex)
 | 
				
			||||||
	} else
 | 
						} else
 | 
				
			||||||
		(void) ip_mc_del_src(in_dev, &msf->imsf_multiaddr, pmc->sfmode,
 | 
							(void) ip_mc_del_src(in_dev, &msf->imsf_multiaddr, pmc->sfmode,
 | 
				
			||||||
			0, NULL, 0);
 | 
								0, NULL, 0);
 | 
				
			||||||
	rcu_assign_pointer(pmc->sflist, newpsl);
 | 
						RCU_INIT_POINTER(pmc->sflist, newpsl);
 | 
				
			||||||
	pmc->sfmode = msf->imsf_fmode;
 | 
						pmc->sfmode = msf->imsf_fmode;
 | 
				
			||||||
	err = 0;
 | 
						err = 0;
 | 
				
			||||||
done:
 | 
					done:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -231,7 +231,7 @@ static void ipip_tunnel_unlink(struct ipip_net *ipn, struct ip_tunnel *t)
 | 
				
			||||||
	     (iter = rtnl_dereference(*tp)) != NULL;
 | 
						     (iter = rtnl_dereference(*tp)) != NULL;
 | 
				
			||||||
	     tp = &iter->next) {
 | 
						     tp = &iter->next) {
 | 
				
			||||||
		if (t == iter) {
 | 
							if (t == iter) {
 | 
				
			||||||
			rcu_assign_pointer(*tp, t->next);
 | 
								RCU_INIT_POINTER(*tp, t->next);
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -241,8 +241,8 @@ static void ipip_tunnel_link(struct ipip_net *ipn, struct ip_tunnel *t)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct ip_tunnel __rcu **tp = ipip_bucket(ipn, t);
 | 
						struct ip_tunnel __rcu **tp = ipip_bucket(ipn, t);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rcu_assign_pointer(t->next, rtnl_dereference(*tp));
 | 
						RCU_INIT_POINTER(t->next, rtnl_dereference(*tp));
 | 
				
			||||||
	rcu_assign_pointer(*tp, t);
 | 
						RCU_INIT_POINTER(*tp, t);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct ip_tunnel * ipip_tunnel_locate(struct net *net,
 | 
					static struct ip_tunnel * ipip_tunnel_locate(struct net *net,
 | 
				
			||||||
| 
						 | 
					@ -301,7 +301,7 @@ static void ipip_tunnel_uninit(struct net_device *dev)
 | 
				
			||||||
	struct ipip_net *ipn = net_generic(net, ipip_net_id);
 | 
						struct ipip_net *ipn = net_generic(net, ipip_net_id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (dev == ipn->fb_tunnel_dev)
 | 
						if (dev == ipn->fb_tunnel_dev)
 | 
				
			||||||
		rcu_assign_pointer(ipn->tunnels_wc[0], NULL);
 | 
							RCU_INIT_POINTER(ipn->tunnels_wc[0], NULL);
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		ipip_tunnel_unlink(ipn, netdev_priv(dev));
 | 
							ipip_tunnel_unlink(ipn, netdev_priv(dev));
 | 
				
			||||||
	dev_put(dev);
 | 
						dev_put(dev);
 | 
				
			||||||
| 
						 | 
					@ -791,7 +791,7 @@ static int __net_init ipip_fb_tunnel_init(struct net_device *dev)
 | 
				
			||||||
		return -ENOMEM;
 | 
							return -ENOMEM;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	dev_hold(dev);
 | 
						dev_hold(dev);
 | 
				
			||||||
	rcu_assign_pointer(ipn->tunnels_wc[0], tunnel);
 | 
						RCU_INIT_POINTER(ipn->tunnels_wc[0], tunnel);
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1176,7 +1176,7 @@ static void mrtsock_destruct(struct sock *sk)
 | 
				
			||||||
	ipmr_for_each_table(mrt, net) {
 | 
						ipmr_for_each_table(mrt, net) {
 | 
				
			||||||
		if (sk == rtnl_dereference(mrt->mroute_sk)) {
 | 
							if (sk == rtnl_dereference(mrt->mroute_sk)) {
 | 
				
			||||||
			IPV4_DEVCONF_ALL(net, MC_FORWARDING)--;
 | 
								IPV4_DEVCONF_ALL(net, MC_FORWARDING)--;
 | 
				
			||||||
			rcu_assign_pointer(mrt->mroute_sk, NULL);
 | 
								RCU_INIT_POINTER(mrt->mroute_sk, NULL);
 | 
				
			||||||
			mroute_clean_tables(mrt);
 | 
								mroute_clean_tables(mrt);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -1224,7 +1224,7 @@ int ip_mroute_setsockopt(struct sock *sk, int optname, char __user *optval, unsi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ret = ip_ra_control(sk, 1, mrtsock_destruct);
 | 
							ret = ip_ra_control(sk, 1, mrtsock_destruct);
 | 
				
			||||||
		if (ret == 0) {
 | 
							if (ret == 0) {
 | 
				
			||||||
			rcu_assign_pointer(mrt->mroute_sk, sk);
 | 
								RCU_INIT_POINTER(mrt->mroute_sk, sk);
 | 
				
			||||||
			IPV4_DEVCONF_ALL(net, MC_FORWARDING)++;
 | 
								IPV4_DEVCONF_ALL(net, MC_FORWARDING)++;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		rtnl_unlock();
 | 
							rtnl_unlock();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -70,14 +70,14 @@ static unsigned int help(struct sk_buff *skb,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void __exit nf_nat_amanda_fini(void)
 | 
					static void __exit nf_nat_amanda_fini(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	rcu_assign_pointer(nf_nat_amanda_hook, NULL);
 | 
						RCU_INIT_POINTER(nf_nat_amanda_hook, NULL);
 | 
				
			||||||
	synchronize_rcu();
 | 
						synchronize_rcu();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int __init nf_nat_amanda_init(void)
 | 
					static int __init nf_nat_amanda_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	BUG_ON(nf_nat_amanda_hook != NULL);
 | 
						BUG_ON(nf_nat_amanda_hook != NULL);
 | 
				
			||||||
	rcu_assign_pointer(nf_nat_amanda_hook, help);
 | 
						RCU_INIT_POINTER(nf_nat_amanda_hook, help);
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -514,7 +514,7 @@ int nf_nat_protocol_register(const struct nf_nat_protocol *proto)
 | 
				
			||||||
		ret = -EBUSY;
 | 
							ret = -EBUSY;
 | 
				
			||||||
		goto out;
 | 
							goto out;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	rcu_assign_pointer(nf_nat_protos[proto->protonum], proto);
 | 
						RCU_INIT_POINTER(nf_nat_protos[proto->protonum], proto);
 | 
				
			||||||
 out:
 | 
					 out:
 | 
				
			||||||
	spin_unlock_bh(&nf_nat_lock);
 | 
						spin_unlock_bh(&nf_nat_lock);
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
| 
						 | 
					@ -525,7 +525,7 @@ EXPORT_SYMBOL(nf_nat_protocol_register);
 | 
				
			||||||
void nf_nat_protocol_unregister(const struct nf_nat_protocol *proto)
 | 
					void nf_nat_protocol_unregister(const struct nf_nat_protocol *proto)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	spin_lock_bh(&nf_nat_lock);
 | 
						spin_lock_bh(&nf_nat_lock);
 | 
				
			||||||
	rcu_assign_pointer(nf_nat_protos[proto->protonum],
 | 
						RCU_INIT_POINTER(nf_nat_protos[proto->protonum],
 | 
				
			||||||
			   &nf_nat_unknown_protocol);
 | 
								   &nf_nat_unknown_protocol);
 | 
				
			||||||
	spin_unlock_bh(&nf_nat_lock);
 | 
						spin_unlock_bh(&nf_nat_lock);
 | 
				
			||||||
	synchronize_rcu();
 | 
						synchronize_rcu();
 | 
				
			||||||
| 
						 | 
					@ -736,10 +736,10 @@ static int __init nf_nat_init(void)
 | 
				
			||||||
	/* Sew in builtin protocols. */
 | 
						/* Sew in builtin protocols. */
 | 
				
			||||||
	spin_lock_bh(&nf_nat_lock);
 | 
						spin_lock_bh(&nf_nat_lock);
 | 
				
			||||||
	for (i = 0; i < MAX_IP_NAT_PROTO; i++)
 | 
						for (i = 0; i < MAX_IP_NAT_PROTO; i++)
 | 
				
			||||||
		rcu_assign_pointer(nf_nat_protos[i], &nf_nat_unknown_protocol);
 | 
							RCU_INIT_POINTER(nf_nat_protos[i], &nf_nat_unknown_protocol);
 | 
				
			||||||
	rcu_assign_pointer(nf_nat_protos[IPPROTO_TCP], &nf_nat_protocol_tcp);
 | 
						RCU_INIT_POINTER(nf_nat_protos[IPPROTO_TCP], &nf_nat_protocol_tcp);
 | 
				
			||||||
	rcu_assign_pointer(nf_nat_protos[IPPROTO_UDP], &nf_nat_protocol_udp);
 | 
						RCU_INIT_POINTER(nf_nat_protos[IPPROTO_UDP], &nf_nat_protocol_udp);
 | 
				
			||||||
	rcu_assign_pointer(nf_nat_protos[IPPROTO_ICMP], &nf_nat_protocol_icmp);
 | 
						RCU_INIT_POINTER(nf_nat_protos[IPPROTO_ICMP], &nf_nat_protocol_icmp);
 | 
				
			||||||
	spin_unlock_bh(&nf_nat_lock);
 | 
						spin_unlock_bh(&nf_nat_lock);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Initialize fake conntrack so that NAT will skip it */
 | 
						/* Initialize fake conntrack so that NAT will skip it */
 | 
				
			||||||
| 
						 | 
					@ -748,12 +748,12 @@ static int __init nf_nat_init(void)
 | 
				
			||||||
	l3proto = nf_ct_l3proto_find_get((u_int16_t)AF_INET);
 | 
						l3proto = nf_ct_l3proto_find_get((u_int16_t)AF_INET);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	BUG_ON(nf_nat_seq_adjust_hook != NULL);
 | 
						BUG_ON(nf_nat_seq_adjust_hook != NULL);
 | 
				
			||||||
	rcu_assign_pointer(nf_nat_seq_adjust_hook, nf_nat_seq_adjust);
 | 
						RCU_INIT_POINTER(nf_nat_seq_adjust_hook, nf_nat_seq_adjust);
 | 
				
			||||||
	BUG_ON(nfnetlink_parse_nat_setup_hook != NULL);
 | 
						BUG_ON(nfnetlink_parse_nat_setup_hook != NULL);
 | 
				
			||||||
	rcu_assign_pointer(nfnetlink_parse_nat_setup_hook,
 | 
						RCU_INIT_POINTER(nfnetlink_parse_nat_setup_hook,
 | 
				
			||||||
			   nfnetlink_parse_nat_setup);
 | 
								   nfnetlink_parse_nat_setup);
 | 
				
			||||||
	BUG_ON(nf_ct_nat_offset != NULL);
 | 
						BUG_ON(nf_ct_nat_offset != NULL);
 | 
				
			||||||
	rcu_assign_pointer(nf_ct_nat_offset, nf_nat_get_offset);
 | 
						RCU_INIT_POINTER(nf_ct_nat_offset, nf_nat_get_offset);
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 cleanup_extend:
 | 
					 cleanup_extend:
 | 
				
			||||||
| 
						 | 
					@ -766,9 +766,9 @@ static void __exit nf_nat_cleanup(void)
 | 
				
			||||||
	unregister_pernet_subsys(&nf_nat_net_ops);
 | 
						unregister_pernet_subsys(&nf_nat_net_ops);
 | 
				
			||||||
	nf_ct_l3proto_put(l3proto);
 | 
						nf_ct_l3proto_put(l3proto);
 | 
				
			||||||
	nf_ct_extend_unregister(&nat_extend);
 | 
						nf_ct_extend_unregister(&nat_extend);
 | 
				
			||||||
	rcu_assign_pointer(nf_nat_seq_adjust_hook, NULL);
 | 
						RCU_INIT_POINTER(nf_nat_seq_adjust_hook, NULL);
 | 
				
			||||||
	rcu_assign_pointer(nfnetlink_parse_nat_setup_hook, NULL);
 | 
						RCU_INIT_POINTER(nfnetlink_parse_nat_setup_hook, NULL);
 | 
				
			||||||
	rcu_assign_pointer(nf_ct_nat_offset, NULL);
 | 
						RCU_INIT_POINTER(nf_ct_nat_offset, NULL);
 | 
				
			||||||
	synchronize_net();
 | 
						synchronize_net();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -113,14 +113,14 @@ static unsigned int nf_nat_ftp(struct sk_buff *skb,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void __exit nf_nat_ftp_fini(void)
 | 
					static void __exit nf_nat_ftp_fini(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	rcu_assign_pointer(nf_nat_ftp_hook, NULL);
 | 
						RCU_INIT_POINTER(nf_nat_ftp_hook, NULL);
 | 
				
			||||||
	synchronize_rcu();
 | 
						synchronize_rcu();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int __init nf_nat_ftp_init(void)
 | 
					static int __init nf_nat_ftp_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	BUG_ON(nf_nat_ftp_hook != NULL);
 | 
						BUG_ON(nf_nat_ftp_hook != NULL);
 | 
				
			||||||
	rcu_assign_pointer(nf_nat_ftp_hook, nf_nat_ftp);
 | 
						RCU_INIT_POINTER(nf_nat_ftp_hook, nf_nat_ftp);
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -581,30 +581,30 @@ static int __init init(void)
 | 
				
			||||||
	BUG_ON(nat_callforwarding_hook != NULL);
 | 
						BUG_ON(nat_callforwarding_hook != NULL);
 | 
				
			||||||
	BUG_ON(nat_q931_hook != NULL);
 | 
						BUG_ON(nat_q931_hook != NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rcu_assign_pointer(set_h245_addr_hook, set_h245_addr);
 | 
						RCU_INIT_POINTER(set_h245_addr_hook, set_h245_addr);
 | 
				
			||||||
	rcu_assign_pointer(set_h225_addr_hook, set_h225_addr);
 | 
						RCU_INIT_POINTER(set_h225_addr_hook, set_h225_addr);
 | 
				
			||||||
	rcu_assign_pointer(set_sig_addr_hook, set_sig_addr);
 | 
						RCU_INIT_POINTER(set_sig_addr_hook, set_sig_addr);
 | 
				
			||||||
	rcu_assign_pointer(set_ras_addr_hook, set_ras_addr);
 | 
						RCU_INIT_POINTER(set_ras_addr_hook, set_ras_addr);
 | 
				
			||||||
	rcu_assign_pointer(nat_rtp_rtcp_hook, nat_rtp_rtcp);
 | 
						RCU_INIT_POINTER(nat_rtp_rtcp_hook, nat_rtp_rtcp);
 | 
				
			||||||
	rcu_assign_pointer(nat_t120_hook, nat_t120);
 | 
						RCU_INIT_POINTER(nat_t120_hook, nat_t120);
 | 
				
			||||||
	rcu_assign_pointer(nat_h245_hook, nat_h245);
 | 
						RCU_INIT_POINTER(nat_h245_hook, nat_h245);
 | 
				
			||||||
	rcu_assign_pointer(nat_callforwarding_hook, nat_callforwarding);
 | 
						RCU_INIT_POINTER(nat_callforwarding_hook, nat_callforwarding);
 | 
				
			||||||
	rcu_assign_pointer(nat_q931_hook, nat_q931);
 | 
						RCU_INIT_POINTER(nat_q931_hook, nat_q931);
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/****************************************************************************/
 | 
					/****************************************************************************/
 | 
				
			||||||
static void __exit fini(void)
 | 
					static void __exit fini(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	rcu_assign_pointer(set_h245_addr_hook, NULL);
 | 
						RCU_INIT_POINTER(set_h245_addr_hook, NULL);
 | 
				
			||||||
	rcu_assign_pointer(set_h225_addr_hook, NULL);
 | 
						RCU_INIT_POINTER(set_h225_addr_hook, NULL);
 | 
				
			||||||
	rcu_assign_pointer(set_sig_addr_hook, NULL);
 | 
						RCU_INIT_POINTER(set_sig_addr_hook, NULL);
 | 
				
			||||||
	rcu_assign_pointer(set_ras_addr_hook, NULL);
 | 
						RCU_INIT_POINTER(set_ras_addr_hook, NULL);
 | 
				
			||||||
	rcu_assign_pointer(nat_rtp_rtcp_hook, NULL);
 | 
						RCU_INIT_POINTER(nat_rtp_rtcp_hook, NULL);
 | 
				
			||||||
	rcu_assign_pointer(nat_t120_hook, NULL);
 | 
						RCU_INIT_POINTER(nat_t120_hook, NULL);
 | 
				
			||||||
	rcu_assign_pointer(nat_h245_hook, NULL);
 | 
						RCU_INIT_POINTER(nat_h245_hook, NULL);
 | 
				
			||||||
	rcu_assign_pointer(nat_callforwarding_hook, NULL);
 | 
						RCU_INIT_POINTER(nat_callforwarding_hook, NULL);
 | 
				
			||||||
	rcu_assign_pointer(nat_q931_hook, NULL);
 | 
						RCU_INIT_POINTER(nat_q931_hook, NULL);
 | 
				
			||||||
	synchronize_rcu();
 | 
						synchronize_rcu();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -75,14 +75,14 @@ static unsigned int help(struct sk_buff *skb,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void __exit nf_nat_irc_fini(void)
 | 
					static void __exit nf_nat_irc_fini(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	rcu_assign_pointer(nf_nat_irc_hook, NULL);
 | 
						RCU_INIT_POINTER(nf_nat_irc_hook, NULL);
 | 
				
			||||||
	synchronize_rcu();
 | 
						synchronize_rcu();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int __init nf_nat_irc_init(void)
 | 
					static int __init nf_nat_irc_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	BUG_ON(nf_nat_irc_hook != NULL);
 | 
						BUG_ON(nf_nat_irc_hook != NULL);
 | 
				
			||||||
	rcu_assign_pointer(nf_nat_irc_hook, help);
 | 
						RCU_INIT_POINTER(nf_nat_irc_hook, help);
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -282,25 +282,25 @@ static int __init nf_nat_helper_pptp_init(void)
 | 
				
			||||||
	nf_nat_need_gre();
 | 
						nf_nat_need_gre();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	BUG_ON(nf_nat_pptp_hook_outbound != NULL);
 | 
						BUG_ON(nf_nat_pptp_hook_outbound != NULL);
 | 
				
			||||||
	rcu_assign_pointer(nf_nat_pptp_hook_outbound, pptp_outbound_pkt);
 | 
						RCU_INIT_POINTER(nf_nat_pptp_hook_outbound, pptp_outbound_pkt);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	BUG_ON(nf_nat_pptp_hook_inbound != NULL);
 | 
						BUG_ON(nf_nat_pptp_hook_inbound != NULL);
 | 
				
			||||||
	rcu_assign_pointer(nf_nat_pptp_hook_inbound, pptp_inbound_pkt);
 | 
						RCU_INIT_POINTER(nf_nat_pptp_hook_inbound, pptp_inbound_pkt);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	BUG_ON(nf_nat_pptp_hook_exp_gre != NULL);
 | 
						BUG_ON(nf_nat_pptp_hook_exp_gre != NULL);
 | 
				
			||||||
	rcu_assign_pointer(nf_nat_pptp_hook_exp_gre, pptp_exp_gre);
 | 
						RCU_INIT_POINTER(nf_nat_pptp_hook_exp_gre, pptp_exp_gre);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	BUG_ON(nf_nat_pptp_hook_expectfn != NULL);
 | 
						BUG_ON(nf_nat_pptp_hook_expectfn != NULL);
 | 
				
			||||||
	rcu_assign_pointer(nf_nat_pptp_hook_expectfn, pptp_nat_expected);
 | 
						RCU_INIT_POINTER(nf_nat_pptp_hook_expectfn, pptp_nat_expected);
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void __exit nf_nat_helper_pptp_fini(void)
 | 
					static void __exit nf_nat_helper_pptp_fini(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	rcu_assign_pointer(nf_nat_pptp_hook_expectfn, NULL);
 | 
						RCU_INIT_POINTER(nf_nat_pptp_hook_expectfn, NULL);
 | 
				
			||||||
	rcu_assign_pointer(nf_nat_pptp_hook_exp_gre, NULL);
 | 
						RCU_INIT_POINTER(nf_nat_pptp_hook_exp_gre, NULL);
 | 
				
			||||||
	rcu_assign_pointer(nf_nat_pptp_hook_inbound, NULL);
 | 
						RCU_INIT_POINTER(nf_nat_pptp_hook_inbound, NULL);
 | 
				
			||||||
	rcu_assign_pointer(nf_nat_pptp_hook_outbound, NULL);
 | 
						RCU_INIT_POINTER(nf_nat_pptp_hook_outbound, NULL);
 | 
				
			||||||
	synchronize_rcu();
 | 
						synchronize_rcu();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -528,13 +528,13 @@ static unsigned int ip_nat_sdp_media(struct sk_buff *skb, unsigned int dataoff,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void __exit nf_nat_sip_fini(void)
 | 
					static void __exit nf_nat_sip_fini(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	rcu_assign_pointer(nf_nat_sip_hook, NULL);
 | 
						RCU_INIT_POINTER(nf_nat_sip_hook, NULL);
 | 
				
			||||||
	rcu_assign_pointer(nf_nat_sip_seq_adjust_hook, NULL);
 | 
						RCU_INIT_POINTER(nf_nat_sip_seq_adjust_hook, NULL);
 | 
				
			||||||
	rcu_assign_pointer(nf_nat_sip_expect_hook, NULL);
 | 
						RCU_INIT_POINTER(nf_nat_sip_expect_hook, NULL);
 | 
				
			||||||
	rcu_assign_pointer(nf_nat_sdp_addr_hook, NULL);
 | 
						RCU_INIT_POINTER(nf_nat_sdp_addr_hook, NULL);
 | 
				
			||||||
	rcu_assign_pointer(nf_nat_sdp_port_hook, NULL);
 | 
						RCU_INIT_POINTER(nf_nat_sdp_port_hook, NULL);
 | 
				
			||||||
	rcu_assign_pointer(nf_nat_sdp_session_hook, NULL);
 | 
						RCU_INIT_POINTER(nf_nat_sdp_session_hook, NULL);
 | 
				
			||||||
	rcu_assign_pointer(nf_nat_sdp_media_hook, NULL);
 | 
						RCU_INIT_POINTER(nf_nat_sdp_media_hook, NULL);
 | 
				
			||||||
	synchronize_rcu();
 | 
						synchronize_rcu();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -547,13 +547,13 @@ static int __init nf_nat_sip_init(void)
 | 
				
			||||||
	BUG_ON(nf_nat_sdp_port_hook != NULL);
 | 
						BUG_ON(nf_nat_sdp_port_hook != NULL);
 | 
				
			||||||
	BUG_ON(nf_nat_sdp_session_hook != NULL);
 | 
						BUG_ON(nf_nat_sdp_session_hook != NULL);
 | 
				
			||||||
	BUG_ON(nf_nat_sdp_media_hook != NULL);
 | 
						BUG_ON(nf_nat_sdp_media_hook != NULL);
 | 
				
			||||||
	rcu_assign_pointer(nf_nat_sip_hook, ip_nat_sip);
 | 
						RCU_INIT_POINTER(nf_nat_sip_hook, ip_nat_sip);
 | 
				
			||||||
	rcu_assign_pointer(nf_nat_sip_seq_adjust_hook, ip_nat_sip_seq_adjust);
 | 
						RCU_INIT_POINTER(nf_nat_sip_seq_adjust_hook, ip_nat_sip_seq_adjust);
 | 
				
			||||||
	rcu_assign_pointer(nf_nat_sip_expect_hook, ip_nat_sip_expect);
 | 
						RCU_INIT_POINTER(nf_nat_sip_expect_hook, ip_nat_sip_expect);
 | 
				
			||||||
	rcu_assign_pointer(nf_nat_sdp_addr_hook, ip_nat_sdp_addr);
 | 
						RCU_INIT_POINTER(nf_nat_sdp_addr_hook, ip_nat_sdp_addr);
 | 
				
			||||||
	rcu_assign_pointer(nf_nat_sdp_port_hook, ip_nat_sdp_port);
 | 
						RCU_INIT_POINTER(nf_nat_sdp_port_hook, ip_nat_sdp_port);
 | 
				
			||||||
	rcu_assign_pointer(nf_nat_sdp_session_hook, ip_nat_sdp_session);
 | 
						RCU_INIT_POINTER(nf_nat_sdp_session_hook, ip_nat_sdp_session);
 | 
				
			||||||
	rcu_assign_pointer(nf_nat_sdp_media_hook, ip_nat_sdp_media);
 | 
						RCU_INIT_POINTER(nf_nat_sdp_media_hook, ip_nat_sdp_media);
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1310,7 +1310,7 @@ static int __init nf_nat_snmp_basic_init(void)
 | 
				
			||||||
	int ret = 0;
 | 
						int ret = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	BUG_ON(nf_nat_snmp_hook != NULL);
 | 
						BUG_ON(nf_nat_snmp_hook != NULL);
 | 
				
			||||||
	rcu_assign_pointer(nf_nat_snmp_hook, help);
 | 
						RCU_INIT_POINTER(nf_nat_snmp_hook, help);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ret = nf_conntrack_helper_register(&snmp_trap_helper);
 | 
						ret = nf_conntrack_helper_register(&snmp_trap_helper);
 | 
				
			||||||
	if (ret < 0) {
 | 
						if (ret < 0) {
 | 
				
			||||||
| 
						 | 
					@ -1322,7 +1322,7 @@ static int __init nf_nat_snmp_basic_init(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void __exit nf_nat_snmp_basic_fini(void)
 | 
					static void __exit nf_nat_snmp_basic_fini(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	rcu_assign_pointer(nf_nat_snmp_hook, NULL);
 | 
						RCU_INIT_POINTER(nf_nat_snmp_hook, NULL);
 | 
				
			||||||
	nf_conntrack_helper_unregister(&snmp_trap_helper);
 | 
						nf_conntrack_helper_unregister(&snmp_trap_helper);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -284,7 +284,7 @@ static int __init nf_nat_standalone_init(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_XFRM
 | 
					#ifdef CONFIG_XFRM
 | 
				
			||||||
	BUG_ON(ip_nat_decode_session != NULL);
 | 
						BUG_ON(ip_nat_decode_session != NULL);
 | 
				
			||||||
	rcu_assign_pointer(ip_nat_decode_session, nat_decode_session);
 | 
						RCU_INIT_POINTER(ip_nat_decode_session, nat_decode_session);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	ret = nf_nat_rule_init();
 | 
						ret = nf_nat_rule_init();
 | 
				
			||||||
	if (ret < 0) {
 | 
						if (ret < 0) {
 | 
				
			||||||
| 
						 | 
					@ -302,7 +302,7 @@ static int __init nf_nat_standalone_init(void)
 | 
				
			||||||
	nf_nat_rule_cleanup();
 | 
						nf_nat_rule_cleanup();
 | 
				
			||||||
 cleanup_decode_session:
 | 
					 cleanup_decode_session:
 | 
				
			||||||
#ifdef CONFIG_XFRM
 | 
					#ifdef CONFIG_XFRM
 | 
				
			||||||
	rcu_assign_pointer(ip_nat_decode_session, NULL);
 | 
						RCU_INIT_POINTER(ip_nat_decode_session, NULL);
 | 
				
			||||||
	synchronize_net();
 | 
						synchronize_net();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
| 
						 | 
					@ -313,7 +313,7 @@ static void __exit nf_nat_standalone_fini(void)
 | 
				
			||||||
	nf_unregister_hooks(nf_nat_ops, ARRAY_SIZE(nf_nat_ops));
 | 
						nf_unregister_hooks(nf_nat_ops, ARRAY_SIZE(nf_nat_ops));
 | 
				
			||||||
	nf_nat_rule_cleanup();
 | 
						nf_nat_rule_cleanup();
 | 
				
			||||||
#ifdef CONFIG_XFRM
 | 
					#ifdef CONFIG_XFRM
 | 
				
			||||||
	rcu_assign_pointer(ip_nat_decode_session, NULL);
 | 
						RCU_INIT_POINTER(ip_nat_decode_session, NULL);
 | 
				
			||||||
	synchronize_net();
 | 
						synchronize_net();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	/* Conntrack caches are unregistered in nf_conntrack_cleanup */
 | 
						/* Conntrack caches are unregistered in nf_conntrack_cleanup */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -36,14 +36,14 @@ static unsigned int help(struct sk_buff *skb,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void __exit nf_nat_tftp_fini(void)
 | 
					static void __exit nf_nat_tftp_fini(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	rcu_assign_pointer(nf_nat_tftp_hook, NULL);
 | 
						RCU_INIT_POINTER(nf_nat_tftp_hook, NULL);
 | 
				
			||||||
	synchronize_rcu();
 | 
						synchronize_rcu();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int __init nf_nat_tftp_init(void)
 | 
					static int __init nf_nat_tftp_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	BUG_ON(nf_nat_tftp_hook != NULL);
 | 
						BUG_ON(nf_nat_tftp_hook != NULL);
 | 
				
			||||||
	rcu_assign_pointer(nf_nat_tftp_hook, help);
 | 
						RCU_INIT_POINTER(nf_nat_tftp_hook, help);
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -428,7 +428,7 @@ static struct inet6_dev * ipv6_add_dev(struct net_device *dev)
 | 
				
			||||||
	ndev->tstamp = jiffies;
 | 
						ndev->tstamp = jiffies;
 | 
				
			||||||
	addrconf_sysctl_register(ndev);
 | 
						addrconf_sysctl_register(ndev);
 | 
				
			||||||
	/* protected by rtnl_lock */
 | 
						/* protected by rtnl_lock */
 | 
				
			||||||
	rcu_assign_pointer(dev->ip6_ptr, ndev);
 | 
						RCU_INIT_POINTER(dev->ip6_ptr, ndev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Join all-node multicast group */
 | 
						/* Join all-node multicast group */
 | 
				
			||||||
	ipv6_dev_mc_inc(dev, &in6addr_linklocal_allnodes);
 | 
						ipv6_dev_mc_inc(dev, &in6addr_linklocal_allnodes);
 | 
				
			||||||
| 
						 | 
					@ -2733,7 +2733,7 @@ static int addrconf_ifdown(struct net_device *dev, int how)
 | 
				
			||||||
		idev->dead = 1;
 | 
							idev->dead = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* protected by rtnl_lock */
 | 
							/* protected by rtnl_lock */
 | 
				
			||||||
		rcu_assign_pointer(dev->ip6_ptr, NULL);
 | 
							RCU_INIT_POINTER(dev->ip6_ptr, NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* Step 1.5: remove snmp6 entry */
 | 
							/* Step 1.5: remove snmp6 entry */
 | 
				
			||||||
		snmp6_unregister_dev(idev);
 | 
							snmp6_unregister_dev(idev);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -218,8 +218,8 @@ ip6_tnl_link(struct ip6_tnl_net *ip6n, struct ip6_tnl *t)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct ip6_tnl __rcu **tp = ip6_tnl_bucket(ip6n, &t->parms);
 | 
						struct ip6_tnl __rcu **tp = ip6_tnl_bucket(ip6n, &t->parms);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rcu_assign_pointer(t->next , rtnl_dereference(*tp));
 | 
						RCU_INIT_POINTER(t->next , rtnl_dereference(*tp));
 | 
				
			||||||
	rcu_assign_pointer(*tp, t);
 | 
						RCU_INIT_POINTER(*tp, t);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
| 
						 | 
					@ -237,7 +237,7 @@ ip6_tnl_unlink(struct ip6_tnl_net *ip6n, struct ip6_tnl *t)
 | 
				
			||||||
	     (iter = rtnl_dereference(*tp)) != NULL;
 | 
						     (iter = rtnl_dereference(*tp)) != NULL;
 | 
				
			||||||
	     tp = &iter->next) {
 | 
						     tp = &iter->next) {
 | 
				
			||||||
		if (t == iter) {
 | 
							if (t == iter) {
 | 
				
			||||||
			rcu_assign_pointer(*tp, t->next);
 | 
								RCU_INIT_POINTER(*tp, t->next);
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -350,7 +350,7 @@ ip6_tnl_dev_uninit(struct net_device *dev)
 | 
				
			||||||
	struct ip6_tnl_net *ip6n = net_generic(net, ip6_tnl_net_id);
 | 
						struct ip6_tnl_net *ip6n = net_generic(net, ip6_tnl_net_id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (dev == ip6n->fb_tnl_dev)
 | 
						if (dev == ip6n->fb_tnl_dev)
 | 
				
			||||||
		rcu_assign_pointer(ip6n->tnls_wc[0], NULL);
 | 
							RCU_INIT_POINTER(ip6n->tnls_wc[0], NULL);
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		ip6_tnl_unlink(ip6n, t);
 | 
							ip6_tnl_unlink(ip6n, t);
 | 
				
			||||||
	ip6_tnl_dst_reset(t);
 | 
						ip6_tnl_dst_reset(t);
 | 
				
			||||||
| 
						 | 
					@ -1440,7 +1440,7 @@ static int __net_init ip6_fb_tnl_dev_init(struct net_device *dev)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	t->parms.proto = IPPROTO_IPV6;
 | 
						t->parms.proto = IPPROTO_IPV6;
 | 
				
			||||||
	dev_hold(dev);
 | 
						dev_hold(dev);
 | 
				
			||||||
	rcu_assign_pointer(ip6n->tnls_wc[0], t);
 | 
						RCU_INIT_POINTER(ip6n->tnls_wc[0], t);
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -130,14 +130,14 @@ static mh_filter_t __rcu *mh_filter __read_mostly;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int rawv6_mh_filter_register(mh_filter_t filter)
 | 
					int rawv6_mh_filter_register(mh_filter_t filter)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	rcu_assign_pointer(mh_filter, filter);
 | 
						RCU_INIT_POINTER(mh_filter, filter);
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
EXPORT_SYMBOL(rawv6_mh_filter_register);
 | 
					EXPORT_SYMBOL(rawv6_mh_filter_register);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int rawv6_mh_filter_unregister(mh_filter_t filter)
 | 
					int rawv6_mh_filter_unregister(mh_filter_t filter)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	rcu_assign_pointer(mh_filter, NULL);
 | 
						RCU_INIT_POINTER(mh_filter, NULL);
 | 
				
			||||||
	synchronize_rcu();
 | 
						synchronize_rcu();
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -182,7 +182,7 @@ static void ipip6_tunnel_unlink(struct sit_net *sitn, struct ip_tunnel *t)
 | 
				
			||||||
	     (iter = rtnl_dereference(*tp)) != NULL;
 | 
						     (iter = rtnl_dereference(*tp)) != NULL;
 | 
				
			||||||
	     tp = &iter->next) {
 | 
						     tp = &iter->next) {
 | 
				
			||||||
		if (t == iter) {
 | 
							if (t == iter) {
 | 
				
			||||||
			rcu_assign_pointer(*tp, t->next);
 | 
								RCU_INIT_POINTER(*tp, t->next);
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -192,8 +192,8 @@ static void ipip6_tunnel_link(struct sit_net *sitn, struct ip_tunnel *t)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct ip_tunnel __rcu **tp = ipip6_bucket(sitn, t);
 | 
						struct ip_tunnel __rcu **tp = ipip6_bucket(sitn, t);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rcu_assign_pointer(t->next, rtnl_dereference(*tp));
 | 
						RCU_INIT_POINTER(t->next, rtnl_dereference(*tp));
 | 
				
			||||||
	rcu_assign_pointer(*tp, t);
 | 
						RCU_INIT_POINTER(*tp, t);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void ipip6_tunnel_clone_6rd(struct net_device *dev, struct sit_net *sitn)
 | 
					static void ipip6_tunnel_clone_6rd(struct net_device *dev, struct sit_net *sitn)
 | 
				
			||||||
| 
						 | 
					@ -391,7 +391,7 @@ ipip6_tunnel_add_prl(struct ip_tunnel *t, struct ip_tunnel_prl *a, int chg)
 | 
				
			||||||
	p->addr = a->addr;
 | 
						p->addr = a->addr;
 | 
				
			||||||
	p->flags = a->flags;
 | 
						p->flags = a->flags;
 | 
				
			||||||
	t->prl_count++;
 | 
						t->prl_count++;
 | 
				
			||||||
	rcu_assign_pointer(t->prl, p);
 | 
						RCU_INIT_POINTER(t->prl, p);
 | 
				
			||||||
out:
 | 
					out:
 | 
				
			||||||
	return err;
 | 
						return err;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -474,7 +474,7 @@ static void ipip6_tunnel_uninit(struct net_device *dev)
 | 
				
			||||||
	struct sit_net *sitn = net_generic(net, sit_net_id);
 | 
						struct sit_net *sitn = net_generic(net, sit_net_id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (dev == sitn->fb_tunnel_dev) {
 | 
						if (dev == sitn->fb_tunnel_dev) {
 | 
				
			||||||
		rcu_assign_pointer(sitn->tunnels_wc[0], NULL);
 | 
							RCU_INIT_POINTER(sitn->tunnels_wc[0], NULL);
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		ipip6_tunnel_unlink(sitn, netdev_priv(dev));
 | 
							ipip6_tunnel_unlink(sitn, netdev_priv(dev));
 | 
				
			||||||
		ipip6_tunnel_del_prl(netdev_priv(dev), NULL);
 | 
							ipip6_tunnel_del_prl(netdev_priv(dev), NULL);
 | 
				
			||||||
| 
						 | 
					@ -1173,7 +1173,7 @@ static int __net_init ipip6_fb_tunnel_init(struct net_device *dev)
 | 
				
			||||||
	if (!dev->tstats)
 | 
						if (!dev->tstats)
 | 
				
			||||||
		return -ENOMEM;
 | 
							return -ENOMEM;
 | 
				
			||||||
	dev_hold(dev);
 | 
						dev_hold(dev);
 | 
				
			||||||
	rcu_assign_pointer(sitn->tunnels_wc[0], tunnel);
 | 
						RCU_INIT_POINTER(sitn->tunnels_wc[0], tunnel);
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -69,7 +69,7 @@ void ___ieee80211_stop_rx_ba_session(struct sta_info *sta, u16 tid,
 | 
				
			||||||
	if (!tid_rx)
 | 
						if (!tid_rx)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rcu_assign_pointer(sta->ampdu_mlme.tid_rx[tid], NULL);
 | 
						RCU_INIT_POINTER(sta->ampdu_mlme.tid_rx[tid], NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_MAC80211_HT_DEBUG
 | 
					#ifdef CONFIG_MAC80211_HT_DEBUG
 | 
				
			||||||
	printk(KERN_DEBUG "Rx BA session stop requested for %pM tid %u\n",
 | 
						printk(KERN_DEBUG "Rx BA session stop requested for %pM tid %u\n",
 | 
				
			||||||
| 
						 | 
					@ -340,7 +340,7 @@ void ieee80211_process_addba_request(struct ieee80211_local *local,
 | 
				
			||||||
	status = WLAN_STATUS_SUCCESS;
 | 
						status = WLAN_STATUS_SUCCESS;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* activate it for RX */
 | 
						/* activate it for RX */
 | 
				
			||||||
	rcu_assign_pointer(sta->ampdu_mlme.tid_rx[tid], tid_agg_rx);
 | 
						RCU_INIT_POINTER(sta->ampdu_mlme.tid_rx[tid], tid_agg_rx);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (timeout)
 | 
						if (timeout)
 | 
				
			||||||
		mod_timer(&tid_agg_rx->session_timer, TU_TO_EXP_TIME(timeout));
 | 
							mod_timer(&tid_agg_rx->session_timer, TU_TO_EXP_TIME(timeout));
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -62,7 +62,7 @@ static int ieee80211_change_iface(struct wiphy *wiphy,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (type == NL80211_IFTYPE_AP_VLAN &&
 | 
						if (type == NL80211_IFTYPE_AP_VLAN &&
 | 
				
			||||||
	    params && params->use_4addr == 0)
 | 
						    params && params->use_4addr == 0)
 | 
				
			||||||
		rcu_assign_pointer(sdata->u.vlan.sta, NULL);
 | 
							RCU_INIT_POINTER(sdata->u.vlan.sta, NULL);
 | 
				
			||||||
	else if (type == NL80211_IFTYPE_STATION &&
 | 
						else if (type == NL80211_IFTYPE_STATION &&
 | 
				
			||||||
		 params && params->use_4addr >= 0)
 | 
							 params && params->use_4addr >= 0)
 | 
				
			||||||
		sdata->u.mgd.use_4addr = params->use_4addr;
 | 
							sdata->u.mgd.use_4addr = params->use_4addr;
 | 
				
			||||||
| 
						 | 
					@ -542,7 +542,7 @@ static int ieee80211_config_beacon(struct ieee80211_sub_if_data *sdata,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sdata->vif.bss_conf.dtim_period = new->dtim_period;
 | 
						sdata->vif.bss_conf.dtim_period = new->dtim_period;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rcu_assign_pointer(sdata->u.ap.beacon, new);
 | 
						RCU_INIT_POINTER(sdata->u.ap.beacon, new);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	synchronize_rcu();
 | 
						synchronize_rcu();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -594,7 +594,7 @@ static int ieee80211_del_beacon(struct wiphy *wiphy, struct net_device *dev)
 | 
				
			||||||
	if (!old)
 | 
						if (!old)
 | 
				
			||||||
		return -ENOENT;
 | 
							return -ENOENT;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rcu_assign_pointer(sdata->u.ap.beacon, NULL);
 | 
						RCU_INIT_POINTER(sdata->u.ap.beacon, NULL);
 | 
				
			||||||
	synchronize_rcu();
 | 
						synchronize_rcu();
 | 
				
			||||||
	kfree(old);
 | 
						kfree(old);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -857,7 +857,7 @@ static int ieee80211_change_station(struct wiphy *wiphy,
 | 
				
			||||||
				return -EBUSY;
 | 
									return -EBUSY;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			rcu_assign_pointer(vlansdata->u.vlan.sta, sta);
 | 
								RCU_INIT_POINTER(vlansdata->u.vlan.sta, sta);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		sta->sdata = vlansdata;
 | 
							sta->sdata = vlansdata;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -84,7 +84,7 @@ static void __ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata,
 | 
				
			||||||
	drv_reset_tsf(local);
 | 
						drv_reset_tsf(local);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	skb = ifibss->skb;
 | 
						skb = ifibss->skb;
 | 
				
			||||||
	rcu_assign_pointer(ifibss->presp, NULL);
 | 
						RCU_INIT_POINTER(ifibss->presp, NULL);
 | 
				
			||||||
	synchronize_rcu();
 | 
						synchronize_rcu();
 | 
				
			||||||
	skb->data = skb->head;
 | 
						skb->data = skb->head;
 | 
				
			||||||
	skb->len = 0;
 | 
						skb->len = 0;
 | 
				
			||||||
| 
						 | 
					@ -184,7 +184,7 @@ static void __ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata,
 | 
				
			||||||
		*pos++ = 0; /* U-APSD no in use */
 | 
							*pos++ = 0; /* U-APSD no in use */
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rcu_assign_pointer(ifibss->presp, skb);
 | 
						RCU_INIT_POINTER(ifibss->presp, skb);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sdata->vif.bss_conf.beacon_int = beacon_int;
 | 
						sdata->vif.bss_conf.beacon_int = beacon_int;
 | 
				
			||||||
	sdata->vif.bss_conf.basic_rates = basic_rates;
 | 
						sdata->vif.bss_conf.basic_rates = basic_rates;
 | 
				
			||||||
| 
						 | 
					@ -995,7 +995,7 @@ int ieee80211_ibss_leave(struct ieee80211_sub_if_data *sdata)
 | 
				
			||||||
	kfree(sdata->u.ibss.ie);
 | 
						kfree(sdata->u.ibss.ie);
 | 
				
			||||||
	skb = rcu_dereference_protected(sdata->u.ibss.presp,
 | 
						skb = rcu_dereference_protected(sdata->u.ibss.presp,
 | 
				
			||||||
					lockdep_is_held(&sdata->u.ibss.mtx));
 | 
										lockdep_is_held(&sdata->u.ibss.mtx));
 | 
				
			||||||
	rcu_assign_pointer(sdata->u.ibss.presp, NULL);
 | 
						RCU_INIT_POINTER(sdata->u.ibss.presp, NULL);
 | 
				
			||||||
	sdata->vif.bss_conf.ibss_joined = false;
 | 
						sdata->vif.bss_conf.ibss_joined = false;
 | 
				
			||||||
	ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON_ENABLED |
 | 
						ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON_ENABLED |
 | 
				
			||||||
						BSS_CHANGED_IBSS);
 | 
											BSS_CHANGED_IBSS);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -456,7 +456,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata,
 | 
				
			||||||
						 BSS_CHANGED_BEACON_ENABLED);
 | 
											 BSS_CHANGED_BEACON_ENABLED);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* remove beacon */
 | 
							/* remove beacon */
 | 
				
			||||||
		rcu_assign_pointer(sdata->u.ap.beacon, NULL);
 | 
							RCU_INIT_POINTER(sdata->u.ap.beacon, NULL);
 | 
				
			||||||
		synchronize_rcu();
 | 
							synchronize_rcu();
 | 
				
			||||||
		kfree(old_beacon);
 | 
							kfree(old_beacon);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -72,7 +72,7 @@ static int sta_info_hash_del(struct ieee80211_local *local,
 | 
				
			||||||
	if (!s)
 | 
						if (!s)
 | 
				
			||||||
		return -ENOENT;
 | 
							return -ENOENT;
 | 
				
			||||||
	if (s == sta) {
 | 
						if (s == sta) {
 | 
				
			||||||
		rcu_assign_pointer(local->sta_hash[STA_HASH(sta->sta.addr)],
 | 
							RCU_INIT_POINTER(local->sta_hash[STA_HASH(sta->sta.addr)],
 | 
				
			||||||
				   s->hnext);
 | 
									   s->hnext);
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -82,7 +82,7 @@ static int sta_info_hash_del(struct ieee80211_local *local,
 | 
				
			||||||
		s = rcu_dereference_protected(s->hnext,
 | 
							s = rcu_dereference_protected(s->hnext,
 | 
				
			||||||
					lockdep_is_held(&local->sta_lock));
 | 
										lockdep_is_held(&local->sta_lock));
 | 
				
			||||||
	if (rcu_access_pointer(s->hnext)) {
 | 
						if (rcu_access_pointer(s->hnext)) {
 | 
				
			||||||
		rcu_assign_pointer(s->hnext, sta->hnext);
 | 
							RCU_INIT_POINTER(s->hnext, sta->hnext);
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -184,7 +184,7 @@ static void sta_info_hash_add(struct ieee80211_local *local,
 | 
				
			||||||
			      struct sta_info *sta)
 | 
								      struct sta_info *sta)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	sta->hnext = local->sta_hash[STA_HASH(sta->sta.addr)];
 | 
						sta->hnext = local->sta_hash[STA_HASH(sta->sta.addr)];
 | 
				
			||||||
	rcu_assign_pointer(local->sta_hash[STA_HASH(sta->sta.addr)], sta);
 | 
						RCU_INIT_POINTER(local->sta_hash[STA_HASH(sta->sta.addr)], sta);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void sta_unblock(struct work_struct *wk)
 | 
					static void sta_unblock(struct work_struct *wk)
 | 
				
			||||||
| 
						 | 
					@ -672,7 +672,7 @@ static int __must_check __sta_info_destroy(struct sta_info *sta)
 | 
				
			||||||
	local->sta_generation++;
 | 
						local->sta_generation++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
 | 
						if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
 | 
				
			||||||
		rcu_assign_pointer(sdata->u.vlan.sta, NULL);
 | 
							RCU_INIT_POINTER(sdata->u.vlan.sta, NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (sta->uploaded) {
 | 
						if (sta->uploaded) {
 | 
				
			||||||
		if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
 | 
							if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -37,7 +37,7 @@ int nf_register_afinfo(const struct nf_afinfo *afinfo)
 | 
				
			||||||
	err = mutex_lock_interruptible(&afinfo_mutex);
 | 
						err = mutex_lock_interruptible(&afinfo_mutex);
 | 
				
			||||||
	if (err < 0)
 | 
						if (err < 0)
 | 
				
			||||||
		return err;
 | 
							return err;
 | 
				
			||||||
	rcu_assign_pointer(nf_afinfo[afinfo->family], afinfo);
 | 
						RCU_INIT_POINTER(nf_afinfo[afinfo->family], afinfo);
 | 
				
			||||||
	mutex_unlock(&afinfo_mutex);
 | 
						mutex_unlock(&afinfo_mutex);
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -46,7 +46,7 @@ EXPORT_SYMBOL_GPL(nf_register_afinfo);
 | 
				
			||||||
void nf_unregister_afinfo(const struct nf_afinfo *afinfo)
 | 
					void nf_unregister_afinfo(const struct nf_afinfo *afinfo)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	mutex_lock(&afinfo_mutex);
 | 
						mutex_lock(&afinfo_mutex);
 | 
				
			||||||
	rcu_assign_pointer(nf_afinfo[afinfo->family], NULL);
 | 
						RCU_INIT_POINTER(nf_afinfo[afinfo->family], NULL);
 | 
				
			||||||
	mutex_unlock(&afinfo_mutex);
 | 
						mutex_unlock(&afinfo_mutex);
 | 
				
			||||||
	synchronize_rcu();
 | 
						synchronize_rcu();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -779,7 +779,7 @@ init_conntrack(struct net *net, struct nf_conn *tmpl,
 | 
				
			||||||
		if (exp->helper) {
 | 
							if (exp->helper) {
 | 
				
			||||||
			help = nf_ct_helper_ext_add(ct, GFP_ATOMIC);
 | 
								help = nf_ct_helper_ext_add(ct, GFP_ATOMIC);
 | 
				
			||||||
			if (help)
 | 
								if (help)
 | 
				
			||||||
				rcu_assign_pointer(help->helper, exp->helper);
 | 
									RCU_INIT_POINTER(help->helper, exp->helper);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_NF_CONNTRACK_MARK
 | 
					#ifdef CONFIG_NF_CONNTRACK_MARK
 | 
				
			||||||
| 
						 | 
					@ -1317,7 +1317,7 @@ static void nf_conntrack_cleanup_net(struct net *net)
 | 
				
			||||||
void nf_conntrack_cleanup(struct net *net)
 | 
					void nf_conntrack_cleanup(struct net *net)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (net_eq(net, &init_net))
 | 
						if (net_eq(net, &init_net))
 | 
				
			||||||
		rcu_assign_pointer(ip_ct_attach, NULL);
 | 
							RCU_INIT_POINTER(ip_ct_attach, NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* This makes sure all current packets have passed through
 | 
						/* This makes sure all current packets have passed through
 | 
				
			||||||
	   netfilter framework.  Roll on, two-stage module
 | 
						   netfilter framework.  Roll on, two-stage module
 | 
				
			||||||
| 
						 | 
					@ -1327,7 +1327,7 @@ void nf_conntrack_cleanup(struct net *net)
 | 
				
			||||||
	nf_conntrack_cleanup_net(net);
 | 
						nf_conntrack_cleanup_net(net);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (net_eq(net, &init_net)) {
 | 
						if (net_eq(net, &init_net)) {
 | 
				
			||||||
		rcu_assign_pointer(nf_ct_destroy, NULL);
 | 
							RCU_INIT_POINTER(nf_ct_destroy, NULL);
 | 
				
			||||||
		nf_conntrack_cleanup_init_net();
 | 
							nf_conntrack_cleanup_init_net();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -1576,11 +1576,11 @@ int nf_conntrack_init(struct net *net)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (net_eq(net, &init_net)) {
 | 
						if (net_eq(net, &init_net)) {
 | 
				
			||||||
		/* For use by REJECT target */
 | 
							/* For use by REJECT target */
 | 
				
			||||||
		rcu_assign_pointer(ip_ct_attach, nf_conntrack_attach);
 | 
							RCU_INIT_POINTER(ip_ct_attach, nf_conntrack_attach);
 | 
				
			||||||
		rcu_assign_pointer(nf_ct_destroy, destroy_conntrack);
 | 
							RCU_INIT_POINTER(nf_ct_destroy, destroy_conntrack);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* Howto get NAT offsets */
 | 
							/* Howto get NAT offsets */
 | 
				
			||||||
		rcu_assign_pointer(nf_ct_nat_offset, NULL);
 | 
							RCU_INIT_POINTER(nf_ct_nat_offset, NULL);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -94,7 +94,7 @@ int nf_conntrack_register_notifier(struct nf_ct_event_notifier *new)
 | 
				
			||||||
		ret = -EBUSY;
 | 
							ret = -EBUSY;
 | 
				
			||||||
		goto out_unlock;
 | 
							goto out_unlock;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	rcu_assign_pointer(nf_conntrack_event_cb, new);
 | 
						RCU_INIT_POINTER(nf_conntrack_event_cb, new);
 | 
				
			||||||
	mutex_unlock(&nf_ct_ecache_mutex);
 | 
						mutex_unlock(&nf_ct_ecache_mutex);
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -112,7 +112,7 @@ void nf_conntrack_unregister_notifier(struct nf_ct_event_notifier *new)
 | 
				
			||||||
	notify = rcu_dereference_protected(nf_conntrack_event_cb,
 | 
						notify = rcu_dereference_protected(nf_conntrack_event_cb,
 | 
				
			||||||
					   lockdep_is_held(&nf_ct_ecache_mutex));
 | 
										   lockdep_is_held(&nf_ct_ecache_mutex));
 | 
				
			||||||
	BUG_ON(notify != new);
 | 
						BUG_ON(notify != new);
 | 
				
			||||||
	rcu_assign_pointer(nf_conntrack_event_cb, NULL);
 | 
						RCU_INIT_POINTER(nf_conntrack_event_cb, NULL);
 | 
				
			||||||
	mutex_unlock(&nf_ct_ecache_mutex);
 | 
						mutex_unlock(&nf_ct_ecache_mutex);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
EXPORT_SYMBOL_GPL(nf_conntrack_unregister_notifier);
 | 
					EXPORT_SYMBOL_GPL(nf_conntrack_unregister_notifier);
 | 
				
			||||||
| 
						 | 
					@ -129,7 +129,7 @@ int nf_ct_expect_register_notifier(struct nf_exp_event_notifier *new)
 | 
				
			||||||
		ret = -EBUSY;
 | 
							ret = -EBUSY;
 | 
				
			||||||
		goto out_unlock;
 | 
							goto out_unlock;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	rcu_assign_pointer(nf_expect_event_cb, new);
 | 
						RCU_INIT_POINTER(nf_expect_event_cb, new);
 | 
				
			||||||
	mutex_unlock(&nf_ct_ecache_mutex);
 | 
						mutex_unlock(&nf_ct_ecache_mutex);
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -147,7 +147,7 @@ void nf_ct_expect_unregister_notifier(struct nf_exp_event_notifier *new)
 | 
				
			||||||
	notify = rcu_dereference_protected(nf_expect_event_cb,
 | 
						notify = rcu_dereference_protected(nf_expect_event_cb,
 | 
				
			||||||
					   lockdep_is_held(&nf_ct_ecache_mutex));
 | 
										   lockdep_is_held(&nf_ct_ecache_mutex));
 | 
				
			||||||
	BUG_ON(notify != new);
 | 
						BUG_ON(notify != new);
 | 
				
			||||||
	rcu_assign_pointer(nf_expect_event_cb, NULL);
 | 
						RCU_INIT_POINTER(nf_expect_event_cb, NULL);
 | 
				
			||||||
	mutex_unlock(&nf_ct_ecache_mutex);
 | 
						mutex_unlock(&nf_ct_ecache_mutex);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
EXPORT_SYMBOL_GPL(nf_ct_expect_unregister_notifier);
 | 
					EXPORT_SYMBOL_GPL(nf_ct_expect_unregister_notifier);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -169,7 +169,7 @@ int nf_ct_extend_register(struct nf_ct_ext_type *type)
 | 
				
			||||||
	   before updating alloc_size */
 | 
						   before updating alloc_size */
 | 
				
			||||||
	type->alloc_size = ALIGN(sizeof(struct nf_ct_ext), type->align)
 | 
						type->alloc_size = ALIGN(sizeof(struct nf_ct_ext), type->align)
 | 
				
			||||||
			   + type->len;
 | 
								   + type->len;
 | 
				
			||||||
	rcu_assign_pointer(nf_ct_ext_types[type->id], type);
 | 
						RCU_INIT_POINTER(nf_ct_ext_types[type->id], type);
 | 
				
			||||||
	update_alloc_size(type);
 | 
						update_alloc_size(type);
 | 
				
			||||||
out:
 | 
					out:
 | 
				
			||||||
	mutex_unlock(&nf_ct_ext_type_mutex);
 | 
						mutex_unlock(&nf_ct_ext_type_mutex);
 | 
				
			||||||
| 
						 | 
					@ -181,7 +181,7 @@ EXPORT_SYMBOL_GPL(nf_ct_extend_register);
 | 
				
			||||||
void nf_ct_extend_unregister(struct nf_ct_ext_type *type)
 | 
					void nf_ct_extend_unregister(struct nf_ct_ext_type *type)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	mutex_lock(&nf_ct_ext_type_mutex);
 | 
						mutex_lock(&nf_ct_ext_type_mutex);
 | 
				
			||||||
	rcu_assign_pointer(nf_ct_ext_types[type->id], NULL);
 | 
						RCU_INIT_POINTER(nf_ct_ext_types[type->id], NULL);
 | 
				
			||||||
	update_alloc_size(type);
 | 
						update_alloc_size(type);
 | 
				
			||||||
	mutex_unlock(&nf_ct_ext_type_mutex);
 | 
						mutex_unlock(&nf_ct_ext_type_mutex);
 | 
				
			||||||
	rcu_barrier(); /* Wait for completion of call_rcu()'s */
 | 
						rcu_barrier(); /* Wait for completion of call_rcu()'s */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -131,7 +131,7 @@ int __nf_ct_try_assign_helper(struct nf_conn *ct, struct nf_conn *tmpl,
 | 
				
			||||||
		helper = __nf_ct_helper_find(&ct->tuplehash[IP_CT_DIR_REPLY].tuple);
 | 
							helper = __nf_ct_helper_find(&ct->tuplehash[IP_CT_DIR_REPLY].tuple);
 | 
				
			||||||
	if (helper == NULL) {
 | 
						if (helper == NULL) {
 | 
				
			||||||
		if (help)
 | 
							if (help)
 | 
				
			||||||
			rcu_assign_pointer(help->helper, NULL);
 | 
								RCU_INIT_POINTER(help->helper, NULL);
 | 
				
			||||||
		goto out;
 | 
							goto out;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -145,7 +145,7 @@ int __nf_ct_try_assign_helper(struct nf_conn *ct, struct nf_conn *tmpl,
 | 
				
			||||||
		memset(&help->help, 0, sizeof(help->help));
 | 
							memset(&help->help, 0, sizeof(help->help));
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rcu_assign_pointer(help->helper, helper);
 | 
						RCU_INIT_POINTER(help->helper, helper);
 | 
				
			||||||
out:
 | 
					out:
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -162,7 +162,7 @@ static inline int unhelp(struct nf_conntrack_tuple_hash *i,
 | 
				
			||||||
			lockdep_is_held(&nf_conntrack_lock)
 | 
								lockdep_is_held(&nf_conntrack_lock)
 | 
				
			||||||
			) == me) {
 | 
								) == me) {
 | 
				
			||||||
		nf_conntrack_event(IPCT_HELPER, ct);
 | 
							nf_conntrack_event(IPCT_HELPER, ct);
 | 
				
			||||||
		rcu_assign_pointer(help->helper, NULL);
 | 
							RCU_INIT_POINTER(help->helper, NULL);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1125,7 +1125,7 @@ ctnetlink_change_helper(struct nf_conn *ct, const struct nlattr * const cda[])
 | 
				
			||||||
		if (help && help->helper) {
 | 
							if (help && help->helper) {
 | 
				
			||||||
			/* we had a helper before ... */
 | 
								/* we had a helper before ... */
 | 
				
			||||||
			nf_ct_remove_expectations(ct);
 | 
								nf_ct_remove_expectations(ct);
 | 
				
			||||||
			rcu_assign_pointer(help->helper, NULL);
 | 
								RCU_INIT_POINTER(help->helper, NULL);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
| 
						 | 
					@ -1163,7 +1163,7 @@ ctnetlink_change_helper(struct nf_conn *ct, const struct nlattr * const cda[])
 | 
				
			||||||
		return -EOPNOTSUPP;
 | 
							return -EOPNOTSUPP;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rcu_assign_pointer(help->helper, helper);
 | 
						RCU_INIT_POINTER(help->helper, helper);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -1386,7 +1386,7 @@ ctnetlink_create_conntrack(struct net *net, u16 zone,
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			/* not in hash table yet so not strictly necessary */
 | 
								/* not in hash table yet so not strictly necessary */
 | 
				
			||||||
			rcu_assign_pointer(help->helper, helper);
 | 
								RCU_INIT_POINTER(help->helper, helper);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		/* try an implicit helper assignation */
 | 
							/* try an implicit helper assignation */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -55,7 +55,7 @@ int nf_log_register(u_int8_t pf, struct nf_logger *logger)
 | 
				
			||||||
		llog = rcu_dereference_protected(nf_loggers[pf],
 | 
							llog = rcu_dereference_protected(nf_loggers[pf],
 | 
				
			||||||
						 lockdep_is_held(&nf_log_mutex));
 | 
											 lockdep_is_held(&nf_log_mutex));
 | 
				
			||||||
		if (llog == NULL)
 | 
							if (llog == NULL)
 | 
				
			||||||
			rcu_assign_pointer(nf_loggers[pf], logger);
 | 
								RCU_INIT_POINTER(nf_loggers[pf], logger);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	mutex_unlock(&nf_log_mutex);
 | 
						mutex_unlock(&nf_log_mutex);
 | 
				
			||||||
| 
						 | 
					@ -74,7 +74,7 @@ void nf_log_unregister(struct nf_logger *logger)
 | 
				
			||||||
		c_logger = rcu_dereference_protected(nf_loggers[i],
 | 
							c_logger = rcu_dereference_protected(nf_loggers[i],
 | 
				
			||||||
						     lockdep_is_held(&nf_log_mutex));
 | 
											     lockdep_is_held(&nf_log_mutex));
 | 
				
			||||||
		if (c_logger == logger)
 | 
							if (c_logger == logger)
 | 
				
			||||||
			rcu_assign_pointer(nf_loggers[i], NULL);
 | 
								RCU_INIT_POINTER(nf_loggers[i], NULL);
 | 
				
			||||||
		list_del(&logger->list[i]);
 | 
							list_del(&logger->list[i]);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	mutex_unlock(&nf_log_mutex);
 | 
						mutex_unlock(&nf_log_mutex);
 | 
				
			||||||
| 
						 | 
					@ -92,7 +92,7 @@ int nf_log_bind_pf(u_int8_t pf, const struct nf_logger *logger)
 | 
				
			||||||
		mutex_unlock(&nf_log_mutex);
 | 
							mutex_unlock(&nf_log_mutex);
 | 
				
			||||||
		return -ENOENT;
 | 
							return -ENOENT;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	rcu_assign_pointer(nf_loggers[pf], logger);
 | 
						RCU_INIT_POINTER(nf_loggers[pf], logger);
 | 
				
			||||||
	mutex_unlock(&nf_log_mutex);
 | 
						mutex_unlock(&nf_log_mutex);
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -103,7 +103,7 @@ void nf_log_unbind_pf(u_int8_t pf)
 | 
				
			||||||
	if (pf >= ARRAY_SIZE(nf_loggers))
 | 
						if (pf >= ARRAY_SIZE(nf_loggers))
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	mutex_lock(&nf_log_mutex);
 | 
						mutex_lock(&nf_log_mutex);
 | 
				
			||||||
	rcu_assign_pointer(nf_loggers[pf], NULL);
 | 
						RCU_INIT_POINTER(nf_loggers[pf], NULL);
 | 
				
			||||||
	mutex_unlock(&nf_log_mutex);
 | 
						mutex_unlock(&nf_log_mutex);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
EXPORT_SYMBOL(nf_log_unbind_pf);
 | 
					EXPORT_SYMBOL(nf_log_unbind_pf);
 | 
				
			||||||
| 
						 | 
					@ -250,7 +250,7 @@ static int nf_log_proc_dostring(ctl_table *table, int write,
 | 
				
			||||||
			mutex_unlock(&nf_log_mutex);
 | 
								mutex_unlock(&nf_log_mutex);
 | 
				
			||||||
			return -ENOENT;
 | 
								return -ENOENT;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		rcu_assign_pointer(nf_loggers[tindex], logger);
 | 
							RCU_INIT_POINTER(nf_loggers[tindex], logger);
 | 
				
			||||||
		mutex_unlock(&nf_log_mutex);
 | 
							mutex_unlock(&nf_log_mutex);
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		mutex_lock(&nf_log_mutex);
 | 
							mutex_lock(&nf_log_mutex);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -40,7 +40,7 @@ int nf_register_queue_handler(u_int8_t pf, const struct nf_queue_handler *qh)
 | 
				
			||||||
	else if (old)
 | 
						else if (old)
 | 
				
			||||||
		ret = -EBUSY;
 | 
							ret = -EBUSY;
 | 
				
			||||||
	else {
 | 
						else {
 | 
				
			||||||
		rcu_assign_pointer(queue_handler[pf], qh);
 | 
							RCU_INIT_POINTER(queue_handler[pf], qh);
 | 
				
			||||||
		ret = 0;
 | 
							ret = 0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	mutex_unlock(&queue_handler_mutex);
 | 
						mutex_unlock(&queue_handler_mutex);
 | 
				
			||||||
| 
						 | 
					@ -65,7 +65,7 @@ int nf_unregister_queue_handler(u_int8_t pf, const struct nf_queue_handler *qh)
 | 
				
			||||||
		return -EINVAL;
 | 
							return -EINVAL;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rcu_assign_pointer(queue_handler[pf], NULL);
 | 
						RCU_INIT_POINTER(queue_handler[pf], NULL);
 | 
				
			||||||
	mutex_unlock(&queue_handler_mutex);
 | 
						mutex_unlock(&queue_handler_mutex);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	synchronize_rcu();
 | 
						synchronize_rcu();
 | 
				
			||||||
| 
						 | 
					@ -84,7 +84,7 @@ void nf_unregister_queue_handlers(const struct nf_queue_handler *qh)
 | 
				
			||||||
				queue_handler[pf],
 | 
									queue_handler[pf],
 | 
				
			||||||
				lockdep_is_held(&queue_handler_mutex)
 | 
									lockdep_is_held(&queue_handler_mutex)
 | 
				
			||||||
				) == qh)
 | 
									) == qh)
 | 
				
			||||||
			rcu_assign_pointer(queue_handler[pf], NULL);
 | 
								RCU_INIT_POINTER(queue_handler[pf], NULL);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	mutex_unlock(&queue_handler_mutex);
 | 
						mutex_unlock(&queue_handler_mutex);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -59,7 +59,7 @@ int nfnetlink_subsys_register(const struct nfnetlink_subsystem *n)
 | 
				
			||||||
		nfnl_unlock();
 | 
							nfnl_unlock();
 | 
				
			||||||
		return -EBUSY;
 | 
							return -EBUSY;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	rcu_assign_pointer(subsys_table[n->subsys_id], n);
 | 
						RCU_INIT_POINTER(subsys_table[n->subsys_id], n);
 | 
				
			||||||
	nfnl_unlock();
 | 
						nfnl_unlock();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
| 
						 | 
					@ -210,7 +210,7 @@ static int __net_init nfnetlink_net_init(struct net *net)
 | 
				
			||||||
	if (!nfnl)
 | 
						if (!nfnl)
 | 
				
			||||||
		return -ENOMEM;
 | 
							return -ENOMEM;
 | 
				
			||||||
	net->nfnl_stash = nfnl;
 | 
						net->nfnl_stash = nfnl;
 | 
				
			||||||
	rcu_assign_pointer(net->nfnl, nfnl);
 | 
						RCU_INIT_POINTER(net->nfnl, nfnl);
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -219,7 +219,7 @@ static void __net_exit nfnetlink_net_exit_batch(struct list_head *net_exit_list)
 | 
				
			||||||
	struct net *net;
 | 
						struct net *net;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	list_for_each_entry(net, net_exit_list, exit_list)
 | 
						list_for_each_entry(net, net_exit_list, exit_list)
 | 
				
			||||||
		rcu_assign_pointer(net->nfnl, NULL);
 | 
							RCU_INIT_POINTER(net->nfnl, NULL);
 | 
				
			||||||
	synchronize_net();
 | 
						synchronize_net();
 | 
				
			||||||
	list_for_each_entry(net, net_exit_list, exit_list)
 | 
						list_for_each_entry(net, net_exit_list, exit_list)
 | 
				
			||||||
		netlink_kernel_release(net->nfnl_stash);
 | 
							netlink_kernel_release(net->nfnl_stash);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -282,7 +282,7 @@ int __init netlbl_domhsh_init(u32 size)
 | 
				
			||||||
		INIT_LIST_HEAD(&hsh_tbl->tbl[iter]);
 | 
							INIT_LIST_HEAD(&hsh_tbl->tbl[iter]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	spin_lock(&netlbl_domhsh_lock);
 | 
						spin_lock(&netlbl_domhsh_lock);
 | 
				
			||||||
	rcu_assign_pointer(netlbl_domhsh, hsh_tbl);
 | 
						RCU_INIT_POINTER(netlbl_domhsh, hsh_tbl);
 | 
				
			||||||
	spin_unlock(&netlbl_domhsh_lock);
 | 
						spin_unlock(&netlbl_domhsh_lock);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
| 
						 | 
					@ -330,7 +330,7 @@ int netlbl_domhsh_add(struct netlbl_dom_map *entry,
 | 
				
			||||||
				    &rcu_dereference(netlbl_domhsh)->tbl[bkt]);
 | 
									    &rcu_dereference(netlbl_domhsh)->tbl[bkt]);
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			INIT_LIST_HEAD(&entry->list);
 | 
								INIT_LIST_HEAD(&entry->list);
 | 
				
			||||||
			rcu_assign_pointer(netlbl_domhsh_def, entry);
 | 
								RCU_INIT_POINTER(netlbl_domhsh_def, entry);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (entry->type == NETLBL_NLTYPE_ADDRSELECT) {
 | 
							if (entry->type == NETLBL_NLTYPE_ADDRSELECT) {
 | 
				
			||||||
| 
						 | 
					@ -451,7 +451,7 @@ int netlbl_domhsh_remove_entry(struct netlbl_dom_map *entry,
 | 
				
			||||||
		if (entry != rcu_dereference(netlbl_domhsh_def))
 | 
							if (entry != rcu_dereference(netlbl_domhsh_def))
 | 
				
			||||||
			list_del_rcu(&entry->list);
 | 
								list_del_rcu(&entry->list);
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
			rcu_assign_pointer(netlbl_domhsh_def, NULL);
 | 
								RCU_INIT_POINTER(netlbl_domhsh_def, NULL);
 | 
				
			||||||
	} else
 | 
						} else
 | 
				
			||||||
		ret_val = -ENOENT;
 | 
							ret_val = -ENOENT;
 | 
				
			||||||
	spin_unlock(&netlbl_domhsh_lock);
 | 
						spin_unlock(&netlbl_domhsh_lock);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -354,7 +354,7 @@ static struct netlbl_unlhsh_iface *netlbl_unlhsh_add_iface(int ifindex)
 | 
				
			||||||
		INIT_LIST_HEAD(&iface->list);
 | 
							INIT_LIST_HEAD(&iface->list);
 | 
				
			||||||
		if (netlbl_unlhsh_rcu_deref(netlbl_unlhsh_def) != NULL)
 | 
							if (netlbl_unlhsh_rcu_deref(netlbl_unlhsh_def) != NULL)
 | 
				
			||||||
			goto add_iface_failure;
 | 
								goto add_iface_failure;
 | 
				
			||||||
		rcu_assign_pointer(netlbl_unlhsh_def, iface);
 | 
							RCU_INIT_POINTER(netlbl_unlhsh_def, iface);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	spin_unlock(&netlbl_unlhsh_lock);
 | 
						spin_unlock(&netlbl_unlhsh_lock);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -621,7 +621,7 @@ static void netlbl_unlhsh_condremove_iface(struct netlbl_unlhsh_iface *iface)
 | 
				
			||||||
	if (iface->ifindex > 0)
 | 
						if (iface->ifindex > 0)
 | 
				
			||||||
		list_del_rcu(&iface->list);
 | 
							list_del_rcu(&iface->list);
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		rcu_assign_pointer(netlbl_unlhsh_def, NULL);
 | 
							RCU_INIT_POINTER(netlbl_unlhsh_def, NULL);
 | 
				
			||||||
	spin_unlock(&netlbl_unlhsh_lock);
 | 
						spin_unlock(&netlbl_unlhsh_lock);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	call_rcu(&iface->rcu, netlbl_unlhsh_free_iface);
 | 
						call_rcu(&iface->rcu, netlbl_unlhsh_free_iface);
 | 
				
			||||||
| 
						 | 
					@ -1449,7 +1449,7 @@ int __init netlbl_unlabel_init(u32 size)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rcu_read_lock();
 | 
						rcu_read_lock();
 | 
				
			||||||
	spin_lock(&netlbl_unlhsh_lock);
 | 
						spin_lock(&netlbl_unlhsh_lock);
 | 
				
			||||||
	rcu_assign_pointer(netlbl_unlhsh, hsh_tbl);
 | 
						RCU_INIT_POINTER(netlbl_unlhsh, hsh_tbl);
 | 
				
			||||||
	spin_unlock(&netlbl_unlhsh_lock);
 | 
						spin_unlock(&netlbl_unlhsh_lock);
 | 
				
			||||||
	rcu_read_unlock();
 | 
						rcu_read_unlock();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -480,7 +480,7 @@ int __init_or_module phonet_proto_register(unsigned int protocol,
 | 
				
			||||||
	if (proto_tab[protocol])
 | 
						if (proto_tab[protocol])
 | 
				
			||||||
		err = -EBUSY;
 | 
							err = -EBUSY;
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		rcu_assign_pointer(proto_tab[protocol], pp);
 | 
							RCU_INIT_POINTER(proto_tab[protocol], pp);
 | 
				
			||||||
	mutex_unlock(&proto_tab_lock);
 | 
						mutex_unlock(&proto_tab_lock);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return err;
 | 
						return err;
 | 
				
			||||||
| 
						 | 
					@ -491,7 +491,7 @@ void phonet_proto_unregister(unsigned int protocol, struct phonet_protocol *pp)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	mutex_lock(&proto_tab_lock);
 | 
						mutex_lock(&proto_tab_lock);
 | 
				
			||||||
	BUG_ON(proto_tab[protocol] != pp);
 | 
						BUG_ON(proto_tab[protocol] != pp);
 | 
				
			||||||
	rcu_assign_pointer(proto_tab[protocol], NULL);
 | 
						RCU_INIT_POINTER(proto_tab[protocol], NULL);
 | 
				
			||||||
	mutex_unlock(&proto_tab_lock);
 | 
						mutex_unlock(&proto_tab_lock);
 | 
				
			||||||
	synchronize_rcu();
 | 
						synchronize_rcu();
 | 
				
			||||||
	proto_unregister(pp->prot);
 | 
						proto_unregister(pp->prot);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -276,7 +276,7 @@ static void phonet_route_autodel(struct net_device *dev)
 | 
				
			||||||
	mutex_lock(&pnn->routes.lock);
 | 
						mutex_lock(&pnn->routes.lock);
 | 
				
			||||||
	for (i = 0; i < 64; i++)
 | 
						for (i = 0; i < 64; i++)
 | 
				
			||||||
		if (dev == pnn->routes.table[i]) {
 | 
							if (dev == pnn->routes.table[i]) {
 | 
				
			||||||
			rcu_assign_pointer(pnn->routes.table[i], NULL);
 | 
								RCU_INIT_POINTER(pnn->routes.table[i], NULL);
 | 
				
			||||||
			set_bit(i, deleted);
 | 
								set_bit(i, deleted);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	mutex_unlock(&pnn->routes.lock);
 | 
						mutex_unlock(&pnn->routes.lock);
 | 
				
			||||||
| 
						 | 
					@ -390,7 +390,7 @@ int phonet_route_add(struct net_device *dev, u8 daddr)
 | 
				
			||||||
	daddr = daddr >> 2;
 | 
						daddr = daddr >> 2;
 | 
				
			||||||
	mutex_lock(&routes->lock);
 | 
						mutex_lock(&routes->lock);
 | 
				
			||||||
	if (routes->table[daddr] == NULL) {
 | 
						if (routes->table[daddr] == NULL) {
 | 
				
			||||||
		rcu_assign_pointer(routes->table[daddr], dev);
 | 
							RCU_INIT_POINTER(routes->table[daddr], dev);
 | 
				
			||||||
		dev_hold(dev);
 | 
							dev_hold(dev);
 | 
				
			||||||
		err = 0;
 | 
							err = 0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -406,7 +406,7 @@ int phonet_route_del(struct net_device *dev, u8 daddr)
 | 
				
			||||||
	daddr = daddr >> 2;
 | 
						daddr = daddr >> 2;
 | 
				
			||||||
	mutex_lock(&routes->lock);
 | 
						mutex_lock(&routes->lock);
 | 
				
			||||||
	if (dev == routes->table[daddr])
 | 
						if (dev == routes->table[daddr])
 | 
				
			||||||
		rcu_assign_pointer(routes->table[daddr], NULL);
 | 
							RCU_INIT_POINTER(routes->table[daddr], NULL);
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		dev = NULL;
 | 
							dev = NULL;
 | 
				
			||||||
	mutex_unlock(&routes->lock);
 | 
						mutex_unlock(&routes->lock);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -679,7 +679,7 @@ int pn_sock_bind_res(struct sock *sk, u8 res)
 | 
				
			||||||
	mutex_lock(&resource_mutex);
 | 
						mutex_lock(&resource_mutex);
 | 
				
			||||||
	if (pnres.sk[res] == NULL) {
 | 
						if (pnres.sk[res] == NULL) {
 | 
				
			||||||
		sock_hold(sk);
 | 
							sock_hold(sk);
 | 
				
			||||||
		rcu_assign_pointer(pnres.sk[res], sk);
 | 
							RCU_INIT_POINTER(pnres.sk[res], sk);
 | 
				
			||||||
		ret = 0;
 | 
							ret = 0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	mutex_unlock(&resource_mutex);
 | 
						mutex_unlock(&resource_mutex);
 | 
				
			||||||
| 
						 | 
					@ -695,7 +695,7 @@ int pn_sock_unbind_res(struct sock *sk, u8 res)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	mutex_lock(&resource_mutex);
 | 
						mutex_lock(&resource_mutex);
 | 
				
			||||||
	if (pnres.sk[res] == sk) {
 | 
						if (pnres.sk[res] == sk) {
 | 
				
			||||||
		rcu_assign_pointer(pnres.sk[res], NULL);
 | 
							RCU_INIT_POINTER(pnres.sk[res], NULL);
 | 
				
			||||||
		ret = 0;
 | 
							ret = 0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	mutex_unlock(&resource_mutex);
 | 
						mutex_unlock(&resource_mutex);
 | 
				
			||||||
| 
						 | 
					@ -714,7 +714,7 @@ void pn_sock_unbind_all_res(struct sock *sk)
 | 
				
			||||||
	mutex_lock(&resource_mutex);
 | 
						mutex_lock(&resource_mutex);
 | 
				
			||||||
	for (res = 0; res < 256; res++) {
 | 
						for (res = 0; res < 256; res++) {
 | 
				
			||||||
		if (pnres.sk[res] == sk) {
 | 
							if (pnres.sk[res] == sk) {
 | 
				
			||||||
			rcu_assign_pointer(pnres.sk[res], NULL);
 | 
								RCU_INIT_POINTER(pnres.sk[res], NULL);
 | 
				
			||||||
			match++;
 | 
								match++;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2463,7 +2463,7 @@ int sock_register(const struct net_proto_family *ops)
 | 
				
			||||||
				      lockdep_is_held(&net_family_lock)))
 | 
									      lockdep_is_held(&net_family_lock)))
 | 
				
			||||||
		err = -EEXIST;
 | 
							err = -EEXIST;
 | 
				
			||||||
	else {
 | 
						else {
 | 
				
			||||||
		rcu_assign_pointer(net_families[ops->family], ops);
 | 
							RCU_INIT_POINTER(net_families[ops->family], ops);
 | 
				
			||||||
		err = 0;
 | 
							err = 0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	spin_unlock(&net_family_lock);
 | 
						spin_unlock(&net_family_lock);
 | 
				
			||||||
| 
						 | 
					@ -2491,7 +2491,7 @@ void sock_unregister(int family)
 | 
				
			||||||
	BUG_ON(family < 0 || family >= NPROTO);
 | 
						BUG_ON(family < 0 || family >= NPROTO);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	spin_lock(&net_family_lock);
 | 
						spin_lock(&net_family_lock);
 | 
				
			||||||
	rcu_assign_pointer(net_families[family], NULL);
 | 
						RCU_INIT_POINTER(net_families[family], NULL);
 | 
				
			||||||
	spin_unlock(&net_family_lock);
 | 
						spin_unlock(&net_family_lock);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	synchronize_rcu();
 | 
						synchronize_rcu();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -122,7 +122,7 @@ gss_cred_set_ctx(struct rpc_cred *cred, struct gss_cl_ctx *ctx)
 | 
				
			||||||
	if (!test_bit(RPCAUTH_CRED_NEW, &cred->cr_flags))
 | 
						if (!test_bit(RPCAUTH_CRED_NEW, &cred->cr_flags))
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	gss_get_ctx(ctx);
 | 
						gss_get_ctx(ctx);
 | 
				
			||||||
	rcu_assign_pointer(gss_cred->gc_ctx, ctx);
 | 
						RCU_INIT_POINTER(gss_cred->gc_ctx, ctx);
 | 
				
			||||||
	set_bit(RPCAUTH_CRED_UPTODATE, &cred->cr_flags);
 | 
						set_bit(RPCAUTH_CRED_UPTODATE, &cred->cr_flags);
 | 
				
			||||||
	smp_mb__before_clear_bit();
 | 
						smp_mb__before_clear_bit();
 | 
				
			||||||
	clear_bit(RPCAUTH_CRED_NEW, &cred->cr_flags);
 | 
						clear_bit(RPCAUTH_CRED_NEW, &cred->cr_flags);
 | 
				
			||||||
| 
						 | 
					@ -970,7 +970,7 @@ gss_destroy_nullcred(struct rpc_cred *cred)
 | 
				
			||||||
	struct gss_auth *gss_auth = container_of(cred->cr_auth, struct gss_auth, rpc_auth);
 | 
						struct gss_auth *gss_auth = container_of(cred->cr_auth, struct gss_auth, rpc_auth);
 | 
				
			||||||
	struct gss_cl_ctx *ctx = gss_cred->gc_ctx;
 | 
						struct gss_cl_ctx *ctx = gss_cred->gc_ctx;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rcu_assign_pointer(gss_cred->gc_ctx, NULL);
 | 
						RCU_INIT_POINTER(gss_cred->gc_ctx, NULL);
 | 
				
			||||||
	call_rcu(&cred->cr_rcu, gss_free_cred_callback);
 | 
						call_rcu(&cred->cr_rcu, gss_free_cred_callback);
 | 
				
			||||||
	if (ctx)
 | 
						if (ctx)
 | 
				
			||||||
		gss_put_ctx(ctx);
 | 
							gss_put_ctx(ctx);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2927,7 +2927,7 @@ static int __net_init xfrm_user_net_init(struct net *net)
 | 
				
			||||||
	if (nlsk == NULL)
 | 
						if (nlsk == NULL)
 | 
				
			||||||
		return -ENOMEM;
 | 
							return -ENOMEM;
 | 
				
			||||||
	net->xfrm.nlsk_stash = nlsk; /* Don't set to NULL */
 | 
						net->xfrm.nlsk_stash = nlsk; /* Don't set to NULL */
 | 
				
			||||||
	rcu_assign_pointer(net->xfrm.nlsk, nlsk);
 | 
						RCU_INIT_POINTER(net->xfrm.nlsk, nlsk);
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2935,7 +2935,7 @@ static void __net_exit xfrm_user_net_exit(struct list_head *net_exit_list)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct net *net;
 | 
						struct net *net;
 | 
				
			||||||
	list_for_each_entry(net, net_exit_list, exit_list)
 | 
						list_for_each_entry(net, net_exit_list, exit_list)
 | 
				
			||||||
		rcu_assign_pointer(net->xfrm.nlsk, NULL);
 | 
							RCU_INIT_POINTER(net->xfrm.nlsk, NULL);
 | 
				
			||||||
	synchronize_net();
 | 
						synchronize_net();
 | 
				
			||||||
	list_for_each_entry(net, net_exit_list, exit_list)
 | 
						list_for_each_entry(net, net_exit_list, exit_list)
 | 
				
			||||||
		netlink_kernel_release(net->xfrm.nlsk_stash);
 | 
							netlink_kernel_release(net->xfrm.nlsk_stash);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue