[kernel] r18529 - in dists/trunk/linux-2.6/debian: . patches/bugfix/all patches/series

Ben Hutchings benh at alioth.debian.org
Sun Jan 15 14:51:37 UTC 2012


Author: benh
Date: Sun Jan 15 14:51:36 2012
New Revision: 18529

Log:
net: reintroduce missing rcu_assign_pointer() calls

Fixes a regression in 3.2.

Added:
   dists/trunk/linux-2.6/debian/patches/bugfix/all/net-reintroduce-missing-rcu_assign_pointer-calls.patch
Modified:
   dists/trunk/linux-2.6/debian/changelog
   dists/trunk/linux-2.6/debian/patches/series/base

Modified: dists/trunk/linux-2.6/debian/changelog
==============================================================================
--- dists/trunk/linux-2.6/debian/changelog	Sun Jan 15 14:51:04 2012	(r18528)
+++ dists/trunk/linux-2.6/debian/changelog	Sun Jan 15 14:51:36 2012	(r18529)
@@ -22,6 +22,7 @@
   * [um,m68k] Register a generic CPU device (fixes regression introduced by
     the fix for #649216)
   * [alpha] add io{read,write}{16,32}be functions, thanks to Michael Cree
+  * net: reintroduce missing rcu_assign_pointer() calls
 
   [ Bastian Blank ]
   * [amd64] crypt: Enable some amd64 only ciphers.

Added: dists/trunk/linux-2.6/debian/patches/bugfix/all/net-reintroduce-missing-rcu_assign_pointer-calls.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/patches/bugfix/all/net-reintroduce-missing-rcu_assign_pointer-calls.patch	Sun Jan 15 14:51:36 2012	(r18529)
@@ -0,0 +1,701 @@
+From: Eric Dumazet <eric.dumazet at gmail.com>
+Date: Thu, 12 Jan 2012 04:41:32 +0000
+Subject: [PATCH] net: reintroduce missing rcu_assign_pointer() calls
+
+commit cf778b00e96df6d64f8e21b8395d1f8a859ecdc7 upstream.
+
+commit a9b3cd7f32 (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: Eric Dumazet <eric.dumazet at gmail.com>
+CC: Stephen Hemminger <shemminger at vyatta.com>
+CC: Paul E. McKenney <paulmck at linux.vnet.ibm.com>
+Signed-off-by: David S. Miller <davem at davemloft.net>
+---
+ net/core/net-sysfs.c                 |    6 +++---
+ net/core/netpoll.c                   |    2 +-
+ net/decnet/dn_dev.c                  |    4 ++--
+ net/ipv4/devinet.c                   |    2 +-
+ net/ipv4/fib_trie.c                  |   10 +++++-----
+ net/ipv4/igmp.c                      |    8 ++++----
+ net/ipv4/ipip.c                      |    8 ++++----
+ net/ipv4/ipmr.c                      |    2 +-
+ net/ipv6/addrconf.c                  |    2 +-
+ net/ipv6/ip6_tunnel.c                |    8 ++++----
+ net/ipv6/raw.c                       |    2 +-
+ net/ipv6/sit.c                       |   10 +++++-----
+ net/mac80211/agg-rx.c                |    2 +-
+ net/mac80211/cfg.c                   |    4 ++--
+ net/mac80211/ibss.c                  |    2 +-
+ net/mac80211/sta_info.c              |    6 +++---
+ net/netfilter/nf_conntrack_core.c    |    2 +-
+ net/netfilter/nf_conntrack_ecache.c  |    4 ++--
+ net/netfilter/nf_conntrack_extend.c  |    2 +-
+ net/netfilter/nf_conntrack_helper.c  |    2 +-
+ net/netfilter/nf_conntrack_netlink.c |    2 +-
+ net/netfilter/nf_log.c               |    6 +++---
+ net/netfilter/nf_queue.c             |    2 +-
+ net/netfilter/nfnetlink.c            |    4 ++--
+ net/netlabel/netlabel_domainhash.c   |    4 ++--
+ net/netlabel/netlabel_unlabeled.c    |    6 ++----
+ net/phonet/af_phonet.c               |    2 +-
+ net/phonet/pn_dev.c                  |    2 +-
+ net/phonet/socket.c                  |    2 +-
+ net/socket.c                         |    2 +-
+ net/sunrpc/auth_gss/auth_gss.c       |    2 +-
+ net/xfrm/xfrm_user.c                 |    2 +-
+ 32 files changed, 61 insertions(+), 63 deletions(-)
+
+diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c
+index 385aefe..0329404 100644
+--- a/net/core/net-sysfs.c
++++ b/net/core/net-sysfs.c
+@@ -990,9 +990,9 @@ static ssize_t store_xps_map(struct netdev_queue *queue,
+ 			nonempty = 1;
+ 	}
+ 
+-	if (nonempty)
+-		RCU_INIT_POINTER(dev->xps_maps, new_dev_maps);
+-	else {
++	if (nonempty) {
++		rcu_assign_pointer(dev->xps_maps, new_dev_maps);
++	} else {
+ 		kfree(new_dev_maps);
+ 		RCU_INIT_POINTER(dev->xps_maps, NULL);
+ 	}
+diff --git a/net/core/netpoll.c b/net/core/netpoll.c
+index cf64c1f..5d4d896 100644
+--- a/net/core/netpoll.c
++++ b/net/core/netpoll.c
+@@ -763,7 +763,7 @@ int __netpoll_setup(struct netpoll *np)
+ 	}
+ 
+ 	/* 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;
+ 
+diff --git a/net/decnet/dn_dev.c b/net/decnet/dn_dev.c
+index 2ab16e1..74d321a 100644
+--- a/net/decnet/dn_dev.c
++++ b/net/decnet/dn_dev.c
+@@ -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;
+-	RCU_INIT_POINTER(dn_db->ifa_list, ifa);
++	rcu_assign_pointer(dn_db->ifa_list, ifa);
+ 
+ 	dn_ifaddr_notify(RTM_NEWADDR, 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));
+ 
+-	RCU_INIT_POINTER(dev->dn_ptr, dn_db);
++	rcu_assign_pointer(dev->dn_ptr, dn_db);
+ 	dn_db->dev = dev;
+ 	init_timer(&dn_db->timer);
+ 
+diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c
+index 65f01dc..e41c40f 100644
+--- a/net/ipv4/devinet.c
++++ b/net/ipv4/devinet.c
+@@ -258,7 +258,7 @@ static struct in_device *inetdev_init(struct net_device *dev)
+ 		ip_mc_up(in_dev);
+ 
+ 	/* 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:
+ 	return in_dev;
+ out_kfree:
+diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c
+index 37b6711..3ce23f9 100644
+--- a/net/ipv4/fib_trie.c
++++ b/net/ipv4/fib_trie.c
+@@ -205,7 +205,7 @@ static inline struct tnode *node_parent_rcu(const struct rt_trie_node *node)
+ 	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.
+  */
+ 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 *
+ 	if (n)
+ 		node_set_parent(n, tn);
+ 
+-	RCU_INIT_POINTER(tn->child[i], n);
++	rcu_assign_pointer(tn->child[i], n);
+ }
+ 
+ #define MAX_WORK 10
+@@ -1015,7 +1015,7 @@ static void trie_rebalance(struct trie *t, struct tnode *tn)
+ 
+ 		tp = node_parent((struct rt_trie_node *) tn);
+ 		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();
+ 		if (!tp)
+@@ -1027,7 +1027,7 @@ static void trie_rebalance(struct trie *t, struct tnode *tn)
+ 	if (IS_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();
+ }
+ 
+@@ -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,
+ 				  (struct rt_trie_node *)tn);
+ 		} else {
+-			RCU_INIT_POINTER(t->trie, (struct rt_trie_node *)tn);
++			rcu_assign_pointer(t->trie, (struct rt_trie_node *)tn);
+ 			tp = tn;
+ 		}
+ 	}
+diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c
+index c3cc64c..c8989a7 100644
+--- a/net/ipv4/igmp.c
++++ b/net/ipv4/igmp.c
+@@ -1244,7 +1244,7 @@ void ip_mc_inc_group(struct in_device *in_dev, __be32 addr)
+ 
+ 	im->next_rcu = in_dev->mc_list;
+ 	in_dev->mc_count++;
+-	RCU_INIT_POINTER(in_dev->mc_list, im);
++	rcu_assign_pointer(in_dev->mc_list, im);
+ 
+ #ifdef CONFIG_IP_MULTICAST
+ 	igmpv3_del_delrec(in_dev, im->multiaddr);
+@@ -1816,7 +1816,7 @@ int ip_mc_join_group(struct sock *sk , struct ip_mreqn *imr)
+ 	iml->next_rcu = inet->mc_list;
+ 	iml->sflist = NULL;
+ 	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);
+ 	err = 0;
+ done:
+@@ -2003,7 +2003,7 @@ int ip_mc_source(int add, int omode, struct sock *sk, struct
+ 			atomic_sub(IP_SFLSIZE(psl->sl_max), &sk->sk_omem_alloc);
+ 			kfree_rcu(psl, rcu);
+ 		}
+-		RCU_INIT_POINTER(pmc->sflist, newpsl);
++		rcu_assign_pointer(pmc->sflist, newpsl);
+ 		psl = newpsl;
+ 	}
+ 	rv = 1;	/* > 0 for insert logic below if sl_count is 0 */
+@@ -2106,7 +2106,7 @@ int ip_mc_msfilter(struct sock *sk, struct ip_msfilter *msf, int ifindex)
+ 	} else
+ 		(void) ip_mc_del_src(in_dev, &msf->imsf_multiaddr, pmc->sfmode,
+ 			0, NULL, 0);
+-	RCU_INIT_POINTER(pmc->sflist, newpsl);
++	rcu_assign_pointer(pmc->sflist, newpsl);
+ 	pmc->sfmode = msf->imsf_fmode;
+ 	err = 0;
+ done:
+diff --git a/net/ipv4/ipip.c b/net/ipv4/ipip.c
+index 0b2e732..17ad951 100644
+--- a/net/ipv4/ipip.c
++++ b/net/ipv4/ipip.c
+@@ -231,7 +231,7 @@ static void ipip_tunnel_unlink(struct ipip_net *ipn, struct ip_tunnel *t)
+ 	     (iter = rtnl_dereference(*tp)) != NULL;
+ 	     tp = &iter->next) {
+ 		if (t == iter) {
+-			RCU_INIT_POINTER(*tp, t->next);
++			rcu_assign_pointer(*tp, t->next);
+ 			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);
+ 
+-	RCU_INIT_POINTER(t->next, rtnl_dereference(*tp));
+-	RCU_INIT_POINTER(*tp, t);
++	rcu_assign_pointer(t->next, rtnl_dereference(*tp));
++	rcu_assign_pointer(*tp, t);
+ }
+ 
+ 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)
+ 		return -ENOMEM;
+ 
+ 	dev_hold(dev);
+-	RCU_INIT_POINTER(ipn->tunnels_wc[0], tunnel);
++	rcu_assign_pointer(ipn->tunnels_wc[0], tunnel);
+ 	return 0;
+ }
+ 
+diff --git a/net/ipv4/ipmr.c b/net/ipv4/ipmr.c
+index 76a7f07..d2aae27 100644
+--- a/net/ipv4/ipmr.c
++++ b/net/ipv4/ipmr.c
+@@ -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);
+ 		if (ret == 0) {
+-			RCU_INIT_POINTER(mrt->mroute_sk, sk);
++			rcu_assign_pointer(mrt->mroute_sk, sk);
+ 			IPV4_DEVCONF_ALL(net, MC_FORWARDING)++;
+ 		}
+ 		rtnl_unlock();
+diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
+index 36806de..836c4ea 100644
+--- a/net/ipv6/addrconf.c
++++ b/net/ipv6/addrconf.c
+@@ -429,7 +429,7 @@ static struct inet6_dev * ipv6_add_dev(struct net_device *dev)
+ 	ndev->tstamp = jiffies;
+ 	addrconf_sysctl_register(ndev);
+ 	/* protected by rtnl_lock */
+-	RCU_INIT_POINTER(dev->ip6_ptr, ndev);
++	rcu_assign_pointer(dev->ip6_ptr, ndev);
+ 
+ 	/* Join all-node multicast group */
+ 	ipv6_dev_mc_inc(dev, &in6addr_linklocal_allnodes);
+diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
+index 4e2e9ff..d19f499 100644
+--- a/net/ipv6/ip6_tunnel.c
++++ b/net/ipv6/ip6_tunnel.c
+@@ -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);
+ 
+-	RCU_INIT_POINTER(t->next , rtnl_dereference(*tp));
+-	RCU_INIT_POINTER(*tp, t);
++	rcu_assign_pointer(t->next , rtnl_dereference(*tp));
++	rcu_assign_pointer(*tp, t);
+ }
+ 
+ /**
+@@ -237,7 +237,7 @@ ip6_tnl_unlink(struct ip6_tnl_net *ip6n, struct ip6_tnl *t)
+ 	     (iter = rtnl_dereference(*tp)) != NULL;
+ 	     tp = &iter->next) {
+ 		if (t == iter) {
+-			RCU_INIT_POINTER(*tp, t->next);
++			rcu_assign_pointer(*tp, t->next);
+ 			break;
+ 		}
+ 	}
+@@ -1450,7 +1450,7 @@ static int __net_init ip6_fb_tnl_dev_init(struct net_device *dev)
+ 
+ 	t->parms.proto = IPPROTO_IPV6;
+ 	dev_hold(dev);
+-	RCU_INIT_POINTER(ip6n->tnls_wc[0], t);
++	rcu_assign_pointer(ip6n->tnls_wc[0], t);
+ 	return 0;
+ }
+ 
+diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c
+index 331af3b..361ebf3 100644
+--- a/net/ipv6/raw.c
++++ b/net/ipv6/raw.c
+@@ -131,7 +131,7 @@ static mh_filter_t __rcu *mh_filter __read_mostly;
+ 
+ int rawv6_mh_filter_register(mh_filter_t filter)
+ {
+-	RCU_INIT_POINTER(mh_filter, filter);
++	rcu_assign_pointer(mh_filter, filter);
+ 	return 0;
+ }
+ EXPORT_SYMBOL(rawv6_mh_filter_register);
+diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c
+index 96f3623..72a939d 100644
+--- a/net/ipv6/sit.c
++++ b/net/ipv6/sit.c
+@@ -182,7 +182,7 @@ static void ipip6_tunnel_unlink(struct sit_net *sitn, struct ip_tunnel *t)
+ 	     (iter = rtnl_dereference(*tp)) != NULL;
+ 	     tp = &iter->next) {
+ 		if (t == iter) {
+-			RCU_INIT_POINTER(*tp, t->next);
++			rcu_assign_pointer(*tp, t->next);
+ 			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);
+ 
+-	RCU_INIT_POINTER(t->next, rtnl_dereference(*tp));
+-	RCU_INIT_POINTER(*tp, t);
++	rcu_assign_pointer(t->next, rtnl_dereference(*tp));
++	rcu_assign_pointer(*tp, t);
+ }
+ 
+ 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)
+ 	p->addr = a->addr;
+ 	p->flags = a->flags;
+ 	t->prl_count++;
+-	RCU_INIT_POINTER(t->prl, p);
++	rcu_assign_pointer(t->prl, p);
+ out:
+ 	return err;
+ }
+@@ -1177,7 +1177,7 @@ static int __net_init ipip6_fb_tunnel_init(struct net_device *dev)
+ 	if (!dev->tstats)
+ 		return -ENOMEM;
+ 	dev_hold(dev);
+-	RCU_INIT_POINTER(sitn->tunnels_wc[0], tunnel);
++	rcu_assign_pointer(sitn->tunnels_wc[0], tunnel);
+ 	return 0;
+ }
+ 
+diff --git a/net/mac80211/agg-rx.c b/net/mac80211/agg-rx.c
+index 93b2434..41c2310 100644
+--- a/net/mac80211/agg-rx.c
++++ b/net/mac80211/agg-rx.c
+@@ -326,7 +326,7 @@ void ieee80211_process_addba_request(struct ieee80211_local *local,
+ 	status = WLAN_STATUS_SUCCESS;
+ 
+ 	/* 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)
+ 		mod_timer(&tid_agg_rx->session_timer, TU_TO_EXP_TIME(timeout));
+diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
+index d06c65f..11cee76 100644
+--- a/net/mac80211/cfg.c
++++ b/net/mac80211/cfg.c
+@@ -575,7 +575,7 @@ static int ieee80211_config_beacon(struct ieee80211_sub_if_data *sdata,
+ 
+ 	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();
+ 
+@@ -922,7 +922,7 @@ static int ieee80211_change_station(struct wiphy *wiphy,
+ 				return -EBUSY;
+ 			}
+ 
+-			RCU_INIT_POINTER(vlansdata->u.vlan.sta, sta);
++			rcu_assign_pointer(vlansdata->u.vlan.sta, sta);
+ 		}
+ 
+ 		sta->sdata = vlansdata;
+diff --git a/net/mac80211/ibss.c b/net/mac80211/ibss.c
+index ede9a8b..3ece106 100644
+--- a/net/mac80211/ibss.c
++++ b/net/mac80211/ibss.c
+@@ -184,7 +184,7 @@ static void __ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata,
+ 		*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.basic_rates = basic_rates;
+diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c
+index 8eaa746..1fdd8ff 100644
+--- a/net/mac80211/sta_info.c
++++ b/net/mac80211/sta_info.c
+@@ -73,7 +73,7 @@ static int sta_info_hash_del(struct ieee80211_local *local,
+ 	if (!s)
+ 		return -ENOENT;
+ 	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);
+ 		return 0;
+ 	}
+@@ -83,7 +83,7 @@ static int sta_info_hash_del(struct ieee80211_local *local,
+ 		s = rcu_dereference_protected(s->hnext,
+ 					lockdep_is_held(&local->sta_lock));
+ 	if (rcu_access_pointer(s->hnext)) {
+-		RCU_INIT_POINTER(s->hnext, sta->hnext);
++		rcu_assign_pointer(s->hnext, sta->hnext);
+ 		return 0;
+ 	}
+ 
+@@ -232,7 +232,7 @@ static void sta_info_hash_add(struct ieee80211_local *local,
+ 			      struct sta_info *sta)
+ {
+ 	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)
+diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c
+index 7202b06..1d15193 100644
+--- a/net/netfilter/nf_conntrack_core.c
++++ b/net/netfilter/nf_conntrack_core.c
+@@ -776,7 +776,7 @@ init_conntrack(struct net *net, struct nf_conn *tmpl,
+ 		if (exp->helper) {
+ 			help = nf_ct_helper_ext_add(ct, GFP_ATOMIC);
+ 			if (help)
+-				RCU_INIT_POINTER(help->helper, exp->helper);
++				rcu_assign_pointer(help->helper, exp->helper);
+ 		}
+ 
+ #ifdef CONFIG_NF_CONNTRACK_MARK
+diff --git a/net/netfilter/nf_conntrack_ecache.c b/net/netfilter/nf_conntrack_ecache.c
+index b62c414..14af632 100644
+--- a/net/netfilter/nf_conntrack_ecache.c
++++ b/net/netfilter/nf_conntrack_ecache.c
+@@ -91,7 +91,7 @@ int nf_conntrack_register_notifier(struct net *net,
+ 		ret = -EBUSY;
+ 		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);
+ 	return ret;
+ 
+@@ -128,7 +128,7 @@ int nf_ct_expect_register_notifier(struct net *net,
+ 		ret = -EBUSY;
+ 		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);
+ 	return ret;
+ 
+diff --git a/net/netfilter/nf_conntrack_extend.c b/net/netfilter/nf_conntrack_extend.c
+index 4605c94..641ff5f 100644
+--- a/net/netfilter/nf_conntrack_extend.c
++++ b/net/netfilter/nf_conntrack_extend.c
+@@ -169,7 +169,7 @@ int nf_ct_extend_register(struct nf_ct_ext_type *type)
+ 	   before updating alloc_size */
+ 	type->alloc_size = ALIGN(sizeof(struct nf_ct_ext), type->align)
+ 			   + 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);
+ out:
+ 	mutex_unlock(&nf_ct_ext_type_mutex);
+diff --git a/net/netfilter/nf_conntrack_helper.c b/net/netfilter/nf_conntrack_helper.c
+index 93c4bdb..bbe23ba 100644
+--- a/net/netfilter/nf_conntrack_helper.c
++++ b/net/netfilter/nf_conntrack_helper.c
+@@ -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));
+ 	}
+ 
+-	RCU_INIT_POINTER(help->helper, helper);
++	rcu_assign_pointer(help->helper, helper);
+ out:
+ 	return ret;
+ }
+diff --git a/net/netfilter/nf_conntrack_netlink.c b/net/netfilter/nf_conntrack_netlink.c
+index 257e772..782cdcd 100644
+--- a/net/netfilter/nf_conntrack_netlink.c
++++ b/net/netfilter/nf_conntrack_netlink.c
+@@ -1163,7 +1163,7 @@ ctnetlink_change_helper(struct nf_conn *ct, const struct nlattr * const cda[])
+ 		return -EOPNOTSUPP;
+ 	}
+ 
+-	RCU_INIT_POINTER(help->helper, helper);
++	rcu_assign_pointer(help->helper, helper);
+ 
+ 	return 0;
+ }
+diff --git a/net/netfilter/nf_log.c b/net/netfilter/nf_log.c
+index ce0c406..957374a 100644
+--- a/net/netfilter/nf_log.c
++++ b/net/netfilter/nf_log.c
+@@ -55,7 +55,7 @@ int nf_log_register(u_int8_t pf, struct nf_logger *logger)
+ 		llog = rcu_dereference_protected(nf_loggers[pf],
+ 						 lockdep_is_held(&nf_log_mutex));
+ 		if (llog == NULL)
+-			RCU_INIT_POINTER(nf_loggers[pf], logger);
++			rcu_assign_pointer(nf_loggers[pf], logger);
+ 	}
+ 
+ 	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);
+ 		return -ENOENT;
+ 	}
+-	RCU_INIT_POINTER(nf_loggers[pf], logger);
++	rcu_assign_pointer(nf_loggers[pf], logger);
+ 	mutex_unlock(&nf_log_mutex);
+ 	return 0;
+ }
+@@ -250,7 +250,7 @@ static int nf_log_proc_dostring(ctl_table *table, int write,
+ 			mutex_unlock(&nf_log_mutex);
+ 			return -ENOENT;
+ 		}
+-		RCU_INIT_POINTER(nf_loggers[tindex], logger);
++		rcu_assign_pointer(nf_loggers[tindex], logger);
+ 		mutex_unlock(&nf_log_mutex);
+ 	} else {
+ 		mutex_lock(&nf_log_mutex);
+diff --git a/net/netfilter/nf_queue.c b/net/netfilter/nf_queue.c
+index 99ffd28..b3a7db6 100644
+--- a/net/netfilter/nf_queue.c
++++ b/net/netfilter/nf_queue.c
+@@ -40,7 +40,7 @@ int nf_register_queue_handler(u_int8_t pf, const struct nf_queue_handler *qh)
+ 	else if (old)
+ 		ret = -EBUSY;
+ 	else {
+-		RCU_INIT_POINTER(queue_handler[pf], qh);
++		rcu_assign_pointer(queue_handler[pf], qh);
+ 		ret = 0;
+ 	}
+ 	mutex_unlock(&queue_handler_mutex);
+diff --git a/net/netfilter/nfnetlink.c b/net/netfilter/nfnetlink.c
+index c879c1a..b4f8d84 100644
+--- a/net/netfilter/nfnetlink.c
++++ b/net/netfilter/nfnetlink.c
+@@ -59,7 +59,7 @@ int nfnetlink_subsys_register(const struct nfnetlink_subsystem *n)
+ 		nfnl_unlock();
+ 		return -EBUSY;
+ 	}
+-	RCU_INIT_POINTER(subsys_table[n->subsys_id], n);
++	rcu_assign_pointer(subsys_table[n->subsys_id], n);
+ 	nfnl_unlock();
+ 
+ 	return 0;
+@@ -210,7 +210,7 @@ static int __net_init nfnetlink_net_init(struct net *net)
+ 	if (!nfnl)
+ 		return -ENOMEM;
+ 	net->nfnl_stash = nfnl;
+-	RCU_INIT_POINTER(net->nfnl, nfnl);
++	rcu_assign_pointer(net->nfnl, nfnl);
+ 	return 0;
+ }
+ 
+diff --git a/net/netlabel/netlabel_domainhash.c b/net/netlabel/netlabel_domainhash.c
+index 3f905e5..e5330ed 100644
+--- a/net/netlabel/netlabel_domainhash.c
++++ b/net/netlabel/netlabel_domainhash.c
+@@ -282,7 +282,7 @@ int __init netlbl_domhsh_init(u32 size)
+ 		INIT_LIST_HEAD(&hsh_tbl->tbl[iter]);
+ 
+ 	spin_lock(&netlbl_domhsh_lock);
+-	RCU_INIT_POINTER(netlbl_domhsh, hsh_tbl);
++	rcu_assign_pointer(netlbl_domhsh, hsh_tbl);
+ 	spin_unlock(&netlbl_domhsh_lock);
+ 
+ 	return 0;
+@@ -330,7 +330,7 @@ int netlbl_domhsh_add(struct netlbl_dom_map *entry,
+ 				    &rcu_dereference(netlbl_domhsh)->tbl[bkt]);
+ 		} else {
+ 			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) {
+diff --git a/net/netlabel/netlabel_unlabeled.c b/net/netlabel/netlabel_unlabeled.c
+index e251c2c..d463f5a 100644
+--- a/net/netlabel/netlabel_unlabeled.c
++++ b/net/netlabel/netlabel_unlabeled.c
+@@ -354,7 +354,7 @@ static struct netlbl_unlhsh_iface *netlbl_unlhsh_add_iface(int ifindex)
+ 		INIT_LIST_HEAD(&iface->list);
+ 		if (netlbl_unlhsh_rcu_deref(netlbl_unlhsh_def) != NULL)
+ 			goto add_iface_failure;
+-		RCU_INIT_POINTER(netlbl_unlhsh_def, iface);
++		rcu_assign_pointer(netlbl_unlhsh_def, iface);
+ 	}
+ 	spin_unlock(&netlbl_unlhsh_lock);
+ 
+@@ -1447,11 +1447,9 @@ int __init netlbl_unlabel_init(u32 size)
+ 	for (iter = 0; iter < hsh_tbl->size; iter++)
+ 		INIT_LIST_HEAD(&hsh_tbl->tbl[iter]);
+ 
+-	rcu_read_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);
+-	rcu_read_unlock();
+ 
+ 	register_netdevice_notifier(&netlbl_unlhsh_netdev_notifier);
+ 
+diff --git a/net/phonet/af_phonet.c b/net/phonet/af_phonet.c
+index bf10ea8..d65f699 100644
+--- a/net/phonet/af_phonet.c
++++ b/net/phonet/af_phonet.c
+@@ -480,7 +480,7 @@ int __init_or_module phonet_proto_register(unsigned int protocol,
+ 	if (proto_tab[protocol])
+ 		err = -EBUSY;
+ 	else
+-		RCU_INIT_POINTER(proto_tab[protocol], pp);
++		rcu_assign_pointer(proto_tab[protocol], pp);
+ 	mutex_unlock(&proto_tab_lock);
+ 
+ 	return err;
+diff --git a/net/phonet/pn_dev.c b/net/phonet/pn_dev.c
+index c582761..9b9a85e 100644
+--- a/net/phonet/pn_dev.c
++++ b/net/phonet/pn_dev.c
+@@ -390,7 +390,7 @@ int phonet_route_add(struct net_device *dev, u8 daddr)
+ 	daddr = daddr >> 2;
+ 	mutex_lock(&routes->lock);
+ 	if (routes->table[daddr] == NULL) {
+-		RCU_INIT_POINTER(routes->table[daddr], dev);
++		rcu_assign_pointer(routes->table[daddr], dev);
+ 		dev_hold(dev);
+ 		err = 0;
+ 	}
+diff --git a/net/phonet/socket.c b/net/phonet/socket.c
+index 3f8d0b1..4c7eff3 100644
+--- a/net/phonet/socket.c
++++ b/net/phonet/socket.c
+@@ -680,7 +680,7 @@ int pn_sock_bind_res(struct sock *sk, u8 res)
+ 	mutex_lock(&resource_mutex);
+ 	if (pnres.sk[res] == NULL) {
+ 		sock_hold(sk);
+-		RCU_INIT_POINTER(pnres.sk[res], sk);
++		rcu_assign_pointer(pnres.sk[res], sk);
+ 		ret = 0;
+ 	}
+ 	mutex_unlock(&resource_mutex);
+diff --git a/net/socket.c b/net/socket.c
+index 2877647..2dce67a 100644
+--- a/net/socket.c
++++ b/net/socket.c
+@@ -2472,7 +2472,7 @@ int sock_register(const struct net_proto_family *ops)
+ 				      lockdep_is_held(&net_family_lock)))
+ 		err = -EEXIST;
+ 	else {
+-		RCU_INIT_POINTER(net_families[ops->family], ops);
++		rcu_assign_pointer(net_families[ops->family], ops);
+ 		err = 0;
+ 	}
+ 	spin_unlock(&net_family_lock);
+diff --git a/net/sunrpc/auth_gss/auth_gss.c b/net/sunrpc/auth_gss/auth_gss.c
+index afb5655..db0efde 100644
+--- a/net/sunrpc/auth_gss/auth_gss.c
++++ b/net/sunrpc/auth_gss/auth_gss.c
+@@ -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))
+ 		return;
+ 	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);
+ 	smp_mb__before_clear_bit();
+ 	clear_bit(RPCAUTH_CRED_NEW, &cred->cr_flags);
+diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c
+index d0a42df..7cae73e 100644
+--- a/net/xfrm/xfrm_user.c
++++ b/net/xfrm/xfrm_user.c
+@@ -2927,7 +2927,7 @@ static int __net_init xfrm_user_net_init(struct net *net)
+ 	if (nlsk == NULL)
+ 		return -ENOMEM;
+ 	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;
+ }
+ 
+-- 
+1.7.8.2
+

Modified: dists/trunk/linux-2.6/debian/patches/series/base
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/series/base	Sun Jan 15 14:51:04 2012	(r18528)
+++ dists/trunk/linux-2.6/debian/patches/series/base	Sun Jan 15 14:51:36 2012	(r18529)
@@ -63,3 +63,4 @@
 + bugfix/arm/ARM-topdown-mmap.patch
 + bugfix/alpha/alpha-add-io-read-write-16-32-be-functions.patch
 + features/arm/ARM-kirkwood-6282A1.patch
++ bugfix/all/net-reintroduce-missing-rcu_assign_pointer-calls.patch



More information about the Kernel-svn-changes mailing list