Lines Matching refs:newp
194 struct ip6addrlbl_entry *newp;
219 newp = kmalloc(sizeof(*newp), GFP_KERNEL);
220 if (!newp)
223 ipv6_addr_prefix(&newp->prefix, prefix, prefixlen);
224 newp->prefixlen = prefixlen;
225 newp->ifindex = ifindex;
226 newp->addrtype = addrtype;
227 newp->label = label;
228 INIT_HLIST_NODE(&newp->list);
230 newp->lbl_net = hold_net(net);
232 atomic_set(&newp->refcnt, 1);
233 return newp;
237 static int __ip6addrlbl_add(struct ip6addrlbl_entry *newp, int replace)
241 ADDRLABEL(KERN_DEBUG "%s(newp=%p, replace=%d)\n",
243 newp, replace);
246 hlist_add_head_rcu(&newp->list, &ip6addrlbl_table.head);
252 if (p->prefixlen == newp->prefixlen &&
253 net_eq(ip6addrlbl_net(p), ip6addrlbl_net(newp)) &&
254 p->ifindex == newp->ifindex &&
255 ipv6_addr_equal(&p->prefix, &newp->prefix)) {
260 hlist_replace_rcu(&p->list, &newp->list);
263 } else if ((p->prefixlen == newp->prefixlen && !p->ifindex) ||
264 (p->prefixlen < newp->prefixlen)) {
265 hlist_add_before_rcu(&newp->list, &p->list);
269 hlist_add_after_rcu(&p->list, &newp->list);
282 struct ip6addrlbl_entry *newp;
289 newp = ip6addrlbl_alloc(net, prefix, prefixlen, ifindex, label);
290 if (IS_ERR(newp))
291 return PTR_ERR(newp);
293 ret = __ip6addrlbl_add(newp, replace);
296 ip6addrlbl_free(newp);