提交 cf778b00 编写于 作者: E Eric Dumazet 提交者: David S. Miller

net: reintroduce missing rcu_assign_pointer() calls

commit a9b3cd7f (rcu: convert uses of rcu_assign_pointer(x, NULL) to
RCU_INIT_POINTER) did a lot of incorrect changes, since it did a
complete conversion of rcu_assign_pointer(x, y) to RCU_INIT_POINTER(x,
y).

We miss needed barriers, even on x86, when y is not NULL.
Signed-off-by: NEric Dumazet <eric.dumazet@gmail.com>
CC: Stephen Hemminger <shemminger@vyatta.com>
CC: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 9ee6045f
...@@ -1177,9 +1177,9 @@ static ssize_t store_xps_map(struct netdev_queue *queue, ...@@ -1177,9 +1177,9 @@ static ssize_t store_xps_map(struct netdev_queue *queue,
nonempty = 1; nonempty = 1;
} }
if (nonempty) if (nonempty) {
RCU_INIT_POINTER(dev->xps_maps, new_dev_maps); rcu_assign_pointer(dev->xps_maps, new_dev_maps);
else { } else {
kfree(new_dev_maps); kfree(new_dev_maps);
RCU_INIT_POINTER(dev->xps_maps, NULL); RCU_INIT_POINTER(dev->xps_maps, NULL);
} }
......
...@@ -765,7 +765,7 @@ int __netpoll_setup(struct netpoll *np) ...@@ -765,7 +765,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_INIT_POINTER(ndev->npinfo, npinfo); rcu_assign_pointer(ndev->npinfo, npinfo);
return 0; return 0;
......
...@@ -388,7 +388,7 @@ static int dn_dev_insert_ifa(struct dn_dev *dn_db, struct dn_ifaddr *ifa) ...@@ -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_INIT_POINTER(dn_db->ifa_list, ifa); rcu_assign_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) ...@@ -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_INIT_POINTER(dev->dn_ptr, dn_db); rcu_assign_pointer(dev->dn_ptr, dn_db);
dn_db->dev = dev; dn_db->dev = dev;
init_timer(&dn_db->timer); init_timer(&dn_db->timer);
......
...@@ -258,7 +258,7 @@ static struct in_device *inetdev_init(struct net_device *dev) ...@@ -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_INIT_POINTER(dev->ip_ptr, in_dev); rcu_assign_pointer(dev->ip_ptr, in_dev);
out: out:
return in_dev; return in_dev;
out_kfree: out_kfree:
......
...@@ -205,7 +205,7 @@ static inline struct tnode *node_parent_rcu(const struct rt_trie_node *node) ...@@ -205,7 +205,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_INIT_POINTER /* Same as rcu_assign_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)
...@@ -529,7 +529,7 @@ static void tnode_put_child_reorg(struct tnode *tn, int i, struct rt_trie_node * ...@@ -529,7 +529,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_INIT_POINTER(tn->child[i], n); rcu_assign_pointer(tn->child[i], n);
} }
#define MAX_WORK 10 #define MAX_WORK 10
...@@ -1015,7 +1015,7 @@ static void trie_rebalance(struct trie *t, struct tnode *tn) ...@@ -1015,7 +1015,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_INIT_POINTER(t->trie, (struct rt_trie_node *)tn); rcu_assign_pointer(t->trie, (struct rt_trie_node *)tn);
tnode_free_flush(); tnode_free_flush();
if (!tp) if (!tp)
...@@ -1027,7 +1027,7 @@ static void trie_rebalance(struct trie *t, struct tnode *tn) ...@@ -1027,7 +1027,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_INIT_POINTER(t->trie, (struct rt_trie_node *)tn); rcu_assign_pointer(t->trie, (struct rt_trie_node *)tn);
tnode_free_flush(); tnode_free_flush();
} }
...@@ -1164,7 +1164,7 @@ static struct list_head *fib_insert_node(struct trie *t, u32 key, int plen) ...@@ -1164,7 +1164,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_INIT_POINTER(t->trie, (struct rt_trie_node *)tn); rcu_assign_pointer(t->trie, (struct rt_trie_node *)tn);
tp = tn; tp = tn;
} }
} }
......
...@@ -1249,7 +1249,7 @@ void ip_mc_inc_group(struct in_device *in_dev, __be32 addr) ...@@ -1249,7 +1249,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_INIT_POINTER(in_dev->mc_list, im); rcu_assign_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);
...@@ -1821,7 +1821,7 @@ int ip_mc_join_group(struct sock *sk , struct ip_mreqn *imr) ...@@ -1821,7 +1821,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_INIT_POINTER(inet->mc_list, iml); rcu_assign_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:
...@@ -2008,7 +2008,7 @@ int ip_mc_source(int add, int omode, struct sock *sk, struct ...@@ -2008,7 +2008,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_INIT_POINTER(pmc->sflist, newpsl); rcu_assign_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 */
...@@ -2111,7 +2111,7 @@ int ip_mc_msfilter(struct sock *sk, struct ip_msfilter *msf, int ifindex) ...@@ -2111,7 +2111,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_INIT_POINTER(pmc->sflist, newpsl); rcu_assign_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) ...@@ -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_INIT_POINTER(*tp, t->next); rcu_assign_pointer(*tp, t->next);
break; break;
} }
} }
...@@ -241,8 +241,8 @@ static void ipip_tunnel_link(struct ipip_net *ipn, struct ip_tunnel *t) ...@@ -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_INIT_POINTER(t->next, rtnl_dereference(*tp)); rcu_assign_pointer(t->next, rtnl_dereference(*tp));
RCU_INIT_POINTER(*tp, t); rcu_assign_pointer(*tp, t);
} }
static struct ip_tunnel * ipip_tunnel_locate(struct net *net, static struct ip_tunnel * ipip_tunnel_locate(struct net *net,
...@@ -792,7 +792,7 @@ static int __net_init ipip_fb_tunnel_init(struct net_device *dev) ...@@ -792,7 +792,7 @@ static int __net_init ipip_fb_tunnel_init(struct net_device *dev)
return -ENOMEM; return -ENOMEM;
dev_hold(dev); dev_hold(dev);
RCU_INIT_POINTER(ipn->tunnels_wc[0], tunnel); rcu_assign_pointer(ipn->tunnels_wc[0], tunnel);
return 0; return 0;
} }
......
...@@ -1225,7 +1225,7 @@ int ip_mroute_setsockopt(struct sock *sk, int optname, char __user *optval, unsi ...@@ -1225,7 +1225,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_INIT_POINTER(mrt->mroute_sk, sk); rcu_assign_pointer(mrt->mroute_sk, sk);
IPV4_DEVCONF_ALL(net, MC_FORWARDING)++; IPV4_DEVCONF_ALL(net, MC_FORWARDING)++;
} }
rtnl_unlock(); rtnl_unlock();
......
...@@ -429,7 +429,7 @@ static struct inet6_dev * ipv6_add_dev(struct net_device *dev) ...@@ -429,7 +429,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_INIT_POINTER(dev->ip6_ptr, ndev); rcu_assign_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);
......
...@@ -218,8 +218,8 @@ ip6_tnl_link(struct ip6_tnl_net *ip6n, struct ip6_tnl *t) ...@@ -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_INIT_POINTER(t->next , rtnl_dereference(*tp)); rcu_assign_pointer(t->next , rtnl_dereference(*tp));
RCU_INIT_POINTER(*tp, t); rcu_assign_pointer(*tp, t);
} }
/** /**
...@@ -237,7 +237,7 @@ ip6_tnl_unlink(struct ip6_tnl_net *ip6n, struct ip6_tnl *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_INIT_POINTER(*tp, t->next); rcu_assign_pointer(*tp, t->next);
break; break;
} }
} }
...@@ -1450,7 +1450,7 @@ static int __net_init ip6_fb_tnl_dev_init(struct net_device *dev) ...@@ -1450,7 +1450,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_INIT_POINTER(ip6n->tnls_wc[0], t); rcu_assign_pointer(ip6n->tnls_wc[0], t);
return 0; return 0;
} }
......
...@@ -131,7 +131,7 @@ static mh_filter_t __rcu *mh_filter __read_mostly; ...@@ -131,7 +131,7 @@ 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_INIT_POINTER(mh_filter, filter); rcu_assign_pointer(mh_filter, filter);
return 0; return 0;
} }
EXPORT_SYMBOL(rawv6_mh_filter_register); EXPORT_SYMBOL(rawv6_mh_filter_register);
......
...@@ -182,7 +182,7 @@ static void ipip6_tunnel_unlink(struct sit_net *sitn, struct ip_tunnel *t) ...@@ -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_INIT_POINTER(*tp, t->next); rcu_assign_pointer(*tp, t->next);
break; break;
} }
} }
...@@ -192,8 +192,8 @@ static void ipip6_tunnel_link(struct sit_net *sitn, struct ip_tunnel *t) ...@@ -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_INIT_POINTER(t->next, rtnl_dereference(*tp)); rcu_assign_pointer(t->next, rtnl_dereference(*tp));
RCU_INIT_POINTER(*tp, t); rcu_assign_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)
...@@ -393,7 +393,7 @@ ipip6_tunnel_add_prl(struct ip_tunnel *t, struct ip_tunnel_prl *a, int chg) ...@@ -393,7 +393,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_INIT_POINTER(t->prl, p); rcu_assign_pointer(t->prl, p);
out: out:
return err; return err;
} }
...@@ -1177,7 +1177,7 @@ static int __net_init ipip6_fb_tunnel_init(struct net_device *dev) ...@@ -1177,7 +1177,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_INIT_POINTER(sitn->tunnels_wc[0], tunnel); rcu_assign_pointer(sitn->tunnels_wc[0], tunnel);
return 0; return 0;
} }
......
...@@ -332,7 +332,7 @@ void ieee80211_process_addba_request(struct ieee80211_local *local, ...@@ -332,7 +332,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_INIT_POINTER(sta->ampdu_mlme.tid_rx[tid], tid_agg_rx); rcu_assign_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));
......
...@@ -616,7 +616,7 @@ static int ieee80211_config_beacon(struct ieee80211_sub_if_data *sdata, ...@@ -616,7 +616,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_INIT_POINTER(sdata->u.ap.beacon, new); rcu_assign_pointer(sdata->u.ap.beacon, new);
synchronize_rcu(); synchronize_rcu();
...@@ -1033,7 +1033,7 @@ static int ieee80211_change_station(struct wiphy *wiphy, ...@@ -1033,7 +1033,7 @@ static int ieee80211_change_station(struct wiphy *wiphy,
return -EBUSY; return -EBUSY;
} }
RCU_INIT_POINTER(vlansdata->u.vlan.sta, sta); rcu_assign_pointer(vlansdata->u.vlan.sta, sta);
} }
sta->sdata = vlansdata; sta->sdata = vlansdata;
......
...@@ -207,7 +207,7 @@ static void __ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata, ...@@ -207,7 +207,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_INIT_POINTER(ifibss->presp, skb); rcu_assign_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;
......
...@@ -73,7 +73,7 @@ static int sta_info_hash_del(struct ieee80211_local *local, ...@@ -73,7 +73,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_INIT_POINTER(local->sta_hash[STA_HASH(sta->sta.addr)], rcu_assign_pointer(local->sta_hash[STA_HASH(sta->sta.addr)],
s->hnext); s->hnext);
return 0; return 0;
} }
...@@ -83,7 +83,7 @@ static int sta_info_hash_del(struct ieee80211_local *local, ...@@ -83,7 +83,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_mtx)); lockdep_is_held(&local->sta_mtx));
if (rcu_access_pointer(s->hnext)) { if (rcu_access_pointer(s->hnext)) {
RCU_INIT_POINTER(s->hnext, sta->hnext); rcu_assign_pointer(s->hnext, sta->hnext);
return 0; return 0;
} }
...@@ -226,7 +226,7 @@ static void sta_info_hash_add(struct ieee80211_local *local, ...@@ -226,7 +226,7 @@ static void sta_info_hash_add(struct ieee80211_local *local,
{ {
lockdep_assert_held(&local->sta_mtx); lockdep_assert_held(&local->sta_mtx);
sta->hnext = local->sta_hash[STA_HASH(sta->sta.addr)]; sta->hnext = local->sta_hash[STA_HASH(sta->sta.addr)];
RCU_INIT_POINTER(local->sta_hash[STA_HASH(sta->sta.addr)], sta); rcu_assign_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)
......
...@@ -777,7 +777,7 @@ init_conntrack(struct net *net, struct nf_conn *tmpl, ...@@ -777,7 +777,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_INIT_POINTER(help->helper, exp->helper); rcu_assign_pointer(help->helper, exp->helper);
} }
#ifdef CONFIG_NF_CONNTRACK_MARK #ifdef CONFIG_NF_CONNTRACK_MARK
......
...@@ -91,7 +91,7 @@ int nf_conntrack_register_notifier(struct net *net, ...@@ -91,7 +91,7 @@ int nf_conntrack_register_notifier(struct net *net,
ret = -EBUSY; ret = -EBUSY;
goto out_unlock; goto out_unlock;
} }
RCU_INIT_POINTER(net->ct.nf_conntrack_event_cb, new); rcu_assign_pointer(net->ct.nf_conntrack_event_cb, new);
mutex_unlock(&nf_ct_ecache_mutex); mutex_unlock(&nf_ct_ecache_mutex);
return ret; return ret;
...@@ -128,7 +128,7 @@ int nf_ct_expect_register_notifier(struct net *net, ...@@ -128,7 +128,7 @@ int nf_ct_expect_register_notifier(struct net *net,
ret = -EBUSY; ret = -EBUSY;
goto out_unlock; goto out_unlock;
} }
RCU_INIT_POINTER(net->ct.nf_expect_event_cb, new); rcu_assign_pointer(net->ct.nf_expect_event_cb, new);
mutex_unlock(&nf_ct_ecache_mutex); mutex_unlock(&nf_ct_ecache_mutex);
return ret; return ret;
......
...@@ -169,7 +169,7 @@ int nf_ct_extend_register(struct nf_ct_ext_type *type) ...@@ -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_INIT_POINTER(nf_ct_ext_types[type->id], type); rcu_assign_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);
......
...@@ -157,7 +157,7 @@ int __nf_ct_try_assign_helper(struct nf_conn *ct, struct nf_conn *tmpl, ...@@ -157,7 +157,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_INIT_POINTER(help->helper, helper); rcu_assign_pointer(help->helper, helper);
out: out:
return ret; return ret;
} }
......
...@@ -1172,7 +1172,7 @@ ctnetlink_change_helper(struct nf_conn *ct, const struct nlattr * const cda[]) ...@@ -1172,7 +1172,7 @@ ctnetlink_change_helper(struct nf_conn *ct, const struct nlattr * const cda[])
return -EOPNOTSUPP; return -EOPNOTSUPP;
} }
RCU_INIT_POINTER(help->helper, helper); rcu_assign_pointer(help->helper, helper);
return 0; return 0;
} }
......
...@@ -55,7 +55,7 @@ int nf_log_register(u_int8_t pf, struct nf_logger *logger) ...@@ -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_INIT_POINTER(nf_loggers[pf], logger); rcu_assign_pointer(nf_loggers[pf], logger);
} }
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) ...@@ -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_INIT_POINTER(nf_loggers[pf], logger); rcu_assign_pointer(nf_loggers[pf], logger);
mutex_unlock(&nf_log_mutex); mutex_unlock(&nf_log_mutex);
return 0; return 0;
} }
...@@ -250,7 +250,7 @@ static int nf_log_proc_dostring(ctl_table *table, int write, ...@@ -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_INIT_POINTER(nf_loggers[tindex], logger); rcu_assign_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) ...@@ -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_INIT_POINTER(queue_handler[pf], qh); rcu_assign_pointer(queue_handler[pf], qh);
ret = 0; ret = 0;
} }
mutex_unlock(&queue_handler_mutex); mutex_unlock(&queue_handler_mutex);
......
...@@ -59,7 +59,7 @@ int nfnetlink_subsys_register(const struct nfnetlink_subsystem *n) ...@@ -59,7 +59,7 @@ int nfnetlink_subsys_register(const struct nfnetlink_subsystem *n)
nfnl_unlock(); nfnl_unlock();
return -EBUSY; return -EBUSY;
} }
RCU_INIT_POINTER(subsys_table[n->subsys_id], n); rcu_assign_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) ...@@ -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_INIT_POINTER(net->nfnl, nfnl); rcu_assign_pointer(net->nfnl, nfnl);
return 0; return 0;
} }
......
...@@ -282,7 +282,7 @@ int __init netlbl_domhsh_init(u32 size) ...@@ -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_INIT_POINTER(netlbl_domhsh, hsh_tbl); rcu_assign_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, ...@@ -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_INIT_POINTER(netlbl_domhsh_def, entry); rcu_assign_pointer(netlbl_domhsh_def, entry);
} }
if (entry->type == NETLBL_NLTYPE_ADDRSELECT) { if (entry->type == NETLBL_NLTYPE_ADDRSELECT) {
......
...@@ -354,7 +354,7 @@ static struct netlbl_unlhsh_iface *netlbl_unlhsh_add_iface(int ifindex) ...@@ -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_INIT_POINTER(netlbl_unlhsh_def, iface); rcu_assign_pointer(netlbl_unlhsh_def, iface);
} }
spin_unlock(&netlbl_unlhsh_lock); spin_unlock(&netlbl_unlhsh_lock);
...@@ -1447,11 +1447,9 @@ int __init netlbl_unlabel_init(u32 size) ...@@ -1447,11 +1447,9 @@ int __init netlbl_unlabel_init(u32 size)
for (iter = 0; iter < hsh_tbl->size; iter++) for (iter = 0; iter < hsh_tbl->size; iter++)
INIT_LIST_HEAD(&hsh_tbl->tbl[iter]); INIT_LIST_HEAD(&hsh_tbl->tbl[iter]);
rcu_read_lock();
spin_lock(&netlbl_unlhsh_lock); spin_lock(&netlbl_unlhsh_lock);
RCU_INIT_POINTER(netlbl_unlhsh, hsh_tbl); rcu_assign_pointer(netlbl_unlhsh, hsh_tbl);
spin_unlock(&netlbl_unlhsh_lock); spin_unlock(&netlbl_unlhsh_lock);
rcu_read_unlock();
register_netdevice_notifier(&netlbl_unlhsh_netdev_notifier); register_netdevice_notifier(&netlbl_unlhsh_netdev_notifier);
......
...@@ -480,7 +480,7 @@ int __init_or_module phonet_proto_register(unsigned int protocol, ...@@ -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_INIT_POINTER(proto_tab[protocol], pp); rcu_assign_pointer(proto_tab[protocol], pp);
mutex_unlock(&proto_tab_lock); mutex_unlock(&proto_tab_lock);
return err; return err;
......
...@@ -390,7 +390,7 @@ int phonet_route_add(struct net_device *dev, u8 daddr) ...@@ -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_INIT_POINTER(routes->table[daddr], dev); rcu_assign_pointer(routes->table[daddr], dev);
dev_hold(dev); dev_hold(dev);
err = 0; err = 0;
} }
......
...@@ -680,7 +680,7 @@ int pn_sock_bind_res(struct sock *sk, u8 res) ...@@ -680,7 +680,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_INIT_POINTER(pnres.sk[res], sk); rcu_assign_pointer(pnres.sk[res], sk);
ret = 0; ret = 0;
} }
mutex_unlock(&resource_mutex); mutex_unlock(&resource_mutex);
......
...@@ -2492,7 +2492,7 @@ int sock_register(const struct net_proto_family *ops) ...@@ -2492,7 +2492,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_INIT_POINTER(net_families[ops->family], ops); rcu_assign_pointer(net_families[ops->family], ops);
err = 0; err = 0;
} }
spin_unlock(&net_family_lock); spin_unlock(&net_family_lock);
......
...@@ -122,7 +122,7 @@ gss_cred_set_ctx(struct rpc_cred *cred, struct gss_cl_ctx *ctx) ...@@ -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_INIT_POINTER(gss_cred->gc_ctx, ctx); rcu_assign_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);
......
...@@ -2927,7 +2927,7 @@ static int __net_init xfrm_user_net_init(struct net *net) ...@@ -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_INIT_POINTER(net->xfrm.nlsk, nlsk); rcu_assign_pointer(net->xfrm.nlsk, nlsk);
return 0; return 0;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册