Lines Matching defs:mc_lst
137 struct ipv6_mc_socklist *mc_lst;
148 for_each_pmc_rcu(np, mc_lst) {
149 if ((ifindex == 0 || mc_lst->ifindex == ifindex) &&
150 ipv6_addr_equal(&mc_lst->addr, addr)) {
157 mc_lst = sock_kmalloc(sk, sizeof(struct ipv6_mc_socklist), GFP_KERNEL);
159 if (!mc_lst)
162 mc_lst->next = NULL;
163 mc_lst->addr = *addr;
176 sock_kfree_s(sk, mc_lst, sizeof(*mc_lst));
180 mc_lst->ifindex = dev->ifindex;
181 mc_lst->sfmode = mode;
182 rwlock_init(&mc_lst->sflock);
183 mc_lst->sflist = NULL;
192 sock_kfree_s(sk, mc_lst, sizeof(*mc_lst));
196 mc_lst->next = np->ipv6_mc_list;
197 rcu_assign_pointer(np->ipv6_mc_list, mc_lst);
220 struct ipv6_mc_socklist *mc_lst;
230 (mc_lst = rtnl_dereference(*lnk)) != NULL;
231 lnk = &mc_lst->next) {
232 if ((ifindex == 0 || mc_lst->ifindex == ifindex) &&
233 ipv6_addr_equal(&mc_lst->addr, addr)) {
236 *lnk = mc_lst->next;
238 dev = __dev_get_by_index(net, mc_lst->ifindex);
242 (void) ip6_mc_leave_src(sk, mc_lst, idev);
244 __ipv6_dev_mc_dec(idev, &mc_lst->addr);
246 (void) ip6_mc_leave_src(sk, mc_lst, NULL);
248 atomic_sub(sizeof(*mc_lst), &sk->sk_omem_alloc);
249 kfree_rcu(mc_lst, rcu);
292 struct ipv6_mc_socklist *mc_lst;
297 while ((mc_lst = rtnl_dereference(np->ipv6_mc_list)) != NULL) {
300 np->ipv6_mc_list = mc_lst->next;
302 dev = __dev_get_by_index(net, mc_lst->ifindex);
306 (void) ip6_mc_leave_src(sk, mc_lst, idev);
308 __ipv6_dev_mc_dec(idev, &mc_lst->addr);
310 (void) ip6_mc_leave_src(sk, mc_lst, NULL);
312 atomic_sub(sizeof(*mc_lst), &sk->sk_omem_alloc);
313 kfree_rcu(mc_lst, rcu);