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