Lines Matching refs:mc_lst
173 struct ipv6_mc_socklist *mc_lst; in __ipv6_sock_mc_join() local
183 for_each_pmc_socklock(np, sk, mc_lst) { in __ipv6_sock_mc_join()
184 if ((ifindex == 0 || mc_lst->ifindex == ifindex) && in __ipv6_sock_mc_join()
185 ipv6_addr_equal(&mc_lst->addr, addr)) in __ipv6_sock_mc_join()
189 mc_lst = sock_kmalloc(sk, sizeof(struct ipv6_mc_socklist), GFP_KERNEL); in __ipv6_sock_mc_join()
191 if (!mc_lst) in __ipv6_sock_mc_join()
194 mc_lst->next = NULL; in __ipv6_sock_mc_join()
195 mc_lst->addr = *addr; in __ipv6_sock_mc_join()
208 sock_kfree_s(sk, mc_lst, sizeof(*mc_lst)); in __ipv6_sock_mc_join()
212 mc_lst->ifindex = dev->ifindex; in __ipv6_sock_mc_join()
213 mc_lst->sfmode = mode; in __ipv6_sock_mc_join()
214 RCU_INIT_POINTER(mc_lst->sflist, NULL); in __ipv6_sock_mc_join()
223 sock_kfree_s(sk, mc_lst, sizeof(*mc_lst)); in __ipv6_sock_mc_join()
227 mc_lst->next = np->ipv6_mc_list; in __ipv6_sock_mc_join()
228 rcu_assign_pointer(np->ipv6_mc_list, mc_lst); in __ipv6_sock_mc_join()
251 struct ipv6_mc_socklist *mc_lst; in ipv6_sock_mc_drop() local
261 (mc_lst = sock_dereference(*lnk, sk)) != NULL; in ipv6_sock_mc_drop()
262 lnk = &mc_lst->next) { in ipv6_sock_mc_drop()
263 if ((ifindex == 0 || mc_lst->ifindex == ifindex) && in ipv6_sock_mc_drop()
264 ipv6_addr_equal(&mc_lst->addr, addr)) { in ipv6_sock_mc_drop()
267 *lnk = mc_lst->next; in ipv6_sock_mc_drop()
269 dev = __dev_get_by_index(net, mc_lst->ifindex); in ipv6_sock_mc_drop()
273 ip6_mc_leave_src(sk, mc_lst, idev); in ipv6_sock_mc_drop()
275 __ipv6_dev_mc_dec(idev, &mc_lst->addr); in ipv6_sock_mc_drop()
277 ip6_mc_leave_src(sk, mc_lst, NULL); in ipv6_sock_mc_drop()
280 atomic_sub(sizeof(*mc_lst), &sk->sk_omem_alloc); in ipv6_sock_mc_drop()
281 kfree_rcu(mc_lst, rcu); in ipv6_sock_mc_drop()
321 struct ipv6_mc_socklist *mc_lst; in __ipv6_sock_mc_close() local
326 while ((mc_lst = sock_dereference(np->ipv6_mc_list, sk)) != NULL) { in __ipv6_sock_mc_close()
329 np->ipv6_mc_list = mc_lst->next; in __ipv6_sock_mc_close()
331 dev = __dev_get_by_index(net, mc_lst->ifindex); in __ipv6_sock_mc_close()
335 ip6_mc_leave_src(sk, mc_lst, idev); in __ipv6_sock_mc_close()
337 __ipv6_dev_mc_dec(idev, &mc_lst->addr); in __ipv6_sock_mc_close()
339 ip6_mc_leave_src(sk, mc_lst, NULL); in __ipv6_sock_mc_close()
342 atomic_sub(sizeof(*mc_lst), &sk->sk_omem_alloc); in __ipv6_sock_mc_close()
343 kfree_rcu(mc_lst, rcu); in __ipv6_sock_mc_close()