diff options
Diffstat (limited to 'net/ipv6/mcast.c')
-rw-r--r-- | net/ipv6/mcast.c | 8 |
1 files changed, 2 insertions, 6 deletions
diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c index 76b893771e6e..f2d98ca7588a 100644 --- a/net/ipv6/mcast.c +++ b/net/ipv6/mcast.c | |||
@@ -201,10 +201,6 @@ int ipv6_sock_mc_join(struct sock *sk, int ifindex, const struct in6_addr *addr) | |||
201 | return 0; | 201 | return 0; |
202 | } | 202 | } |
203 | 203 | ||
204 | static void ipv6_mc_socklist_reclaim(struct rcu_head *head) | ||
205 | { | ||
206 | kfree(container_of(head, struct ipv6_mc_socklist, rcu)); | ||
207 | } | ||
208 | /* | 204 | /* |
209 | * socket leave on multicast group | 205 | * socket leave on multicast group |
210 | */ | 206 | */ |
@@ -239,7 +235,7 @@ int ipv6_sock_mc_drop(struct sock *sk, int ifindex, const struct in6_addr *addr) | |||
239 | (void) ip6_mc_leave_src(sk, mc_lst, NULL); | 235 | (void) ip6_mc_leave_src(sk, mc_lst, NULL); |
240 | rcu_read_unlock(); | 236 | rcu_read_unlock(); |
241 | atomic_sub(sizeof(*mc_lst), &sk->sk_omem_alloc); | 237 | atomic_sub(sizeof(*mc_lst), &sk->sk_omem_alloc); |
242 | call_rcu(&mc_lst->rcu, ipv6_mc_socklist_reclaim); | 238 | kfree_rcu(mc_lst, rcu); |
243 | return 0; | 239 | return 0; |
244 | } | 240 | } |
245 | } | 241 | } |
@@ -307,7 +303,7 @@ void ipv6_sock_mc_close(struct sock *sk) | |||
307 | rcu_read_unlock(); | 303 | rcu_read_unlock(); |
308 | 304 | ||
309 | atomic_sub(sizeof(*mc_lst), &sk->sk_omem_alloc); | 305 | atomic_sub(sizeof(*mc_lst), &sk->sk_omem_alloc); |
310 | call_rcu(&mc_lst->rcu, ipv6_mc_socklist_reclaim); | 306 | kfree_rcu(mc_lst, rcu); |
311 | 307 | ||
312 | spin_lock(&ipv6_sk_mc_lock); | 308 | spin_lock(&ipv6_sk_mc_lock); |
313 | } | 309 | } |