net: reintroduce missing rcu_assign_pointer() calls
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@gmail.com>
CC: Stephen Hemminger <shemminger@vyatta.com>
CC: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
9ee6045f09
commit
cf778b00e9
@@ -1249,7 +1249,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);
|
||||
@@ -1821,7 +1821,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:
|
||||
@@ -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);
|
||||
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 */
|
||||
@@ -2111,7 +2111,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:
|
||||
|
Reference in New Issue
Block a user