Lines Matching refs:new
62 struct aa_proxy *new;
64 new = kzalloc(sizeof(struct aa_proxy), gfp);
65 if (new) {
66 kref_init(&new->count);
67 rcu_assign_pointer(new->label, aa_get_label(label));
69 return new;
73 void __aa_proxy_redirect(struct aa_label *orig, struct aa_label *new)
78 AA_BUG(!new);
83 rcu_assign_pointer(orig->proxy->label, aa_get_label(new));
88 static void __proxy_share(struct aa_label *old, struct aa_label *new)
90 struct aa_proxy *proxy = new->proxy;
92 new->proxy = aa_get_proxy(old->proxy);
93 __aa_proxy_redirect(old, new);
392 static void label_free_or_put_new(struct aa_label *label, struct aa_label *new)
394 if (label != new)
396 aa_label_free(new);
398 aa_put_label(new);
420 * @proxy: proxy to use OR null if to allocate a new one
423 * Returns: new label
428 struct aa_label *new;
433 new = kzalloc(struct_size(new, vec, size + 1), gfp);
434 AA_DEBUG("%s (%p)\n", __func__, new);
435 if (!new)
438 if (!aa_label_init(new, size, gfp))
442 proxy = aa_alloc_proxy(new, gfp);
447 /* just set new's proxy, don't redirect proxy here if it was passed in*/
448 new->proxy = proxy;
450 return new;
453 kfree(new);
590 * @new: label to redirect to
595 static bool __label_remove(struct aa_label *label, struct aa_label *new)
603 if (new)
604 __aa_proxy_redirect(label, new);
619 * __label_replace - replace @old with @new in label set
621 * @new: label to replace @old with
624 * valid ref count be held on @new
625 * Returns: true if @old was in set and replaced by @new
628 * that @new directly replaces @old position in the set (ie.
631 static bool __label_replace(struct aa_label *old, struct aa_label *new)
637 AA_BUG(!new);
639 AA_BUG(new->flags & FLAG_IN_TREE);
645 rb_replace_node(&old->node, &new->node, &ls->root);
647 new->flags |= FLAG_IN_TREE;
657 * @label: new label to insert (NOT NULL)
670 struct rb_node **new, *parent = NULL;
678 /* Figure out where to put new node */
679 new = &ls->root.rb_node;
680 while (*new) {
681 struct aa_label *this = rb_entry(*new, struct aa_label, node);
684 parent = *new;
699 new = &((*new)->rb_left);
701 new = &((*new)->rb_right);
704 /* Add new node and rebalance tree. */
705 rb_link_node(&label->node, parent, new);
790 * aa_label_replace - replace a label @old with a new version @new
792 * @new: label replacing @old
795 * else @old was not in tree, and @new was not inserted
797 bool aa_label_replace(struct aa_label *old, struct aa_label *new)
802 if (name_is_shared(old, new) && labels_ns(old) == labels_ns(new)) {
804 if (old->proxy != new->proxy)
805 __proxy_share(old, new);
807 __aa_proxy_redirect(old, new);
808 res = __label_replace(old, new);
815 res = __label_remove(old, new);
816 if (labels_ns(old) != labels_ns(new)) {
818 ls = labels_set(new);
821 l = __label_insert(ls, new, true);
822 res = (l == new);
863 struct aa_label *new;
876 new = aa_label_alloc(len, NULL, gfp);
877 if (!new)
881 new->vec[i] = aa_get_profile(vec[i]);
884 label = __label_insert(ls, new, false);
886 label_free_or_put_new(label, new);
1018 * label_merge_insert - create a new label by merging @a and @b
1019 * @new: preallocated label to merge into (NOT NULL)
1025 * Returns: ref counted label either @new if merge is unique
1029 * NOTE: will not use @new if the merge results in @new == @a or @b
1034 static struct aa_label *label_merge_insert(struct aa_label *new,
1050 AA_BUG(!new);
1051 AA_BUG(new->size < a->size + b->size);
1056 new->vec[k] = aa_get_newest_profile(next);
1057 AA_BUG(!new->vec[k]->label.proxy);
1058 AA_BUG(!new->vec[k]->label.proxy->label);
1059 if (next->label.proxy != new->vec[k]->label.proxy)
1064 new->vec[k++] = aa_get_profile(next);
1067 new->size = k;
1068 new->vec[k] = NULL;
1071 new->size -= aa_vec_unique(&new->vec[0], new->size,
1074 if (new->size == 1) {
1075 label = aa_get_label(&new->vec[0]->label);
1081 * for new->size == a->size == b->size unless a == b
1088 new->flags |= accum_vec_flags(new->vec, new->size);
1089 ls = labels_set(new);
1091 label = __label_insert(labels_set(new), new, false);
1191 * aa_label_merge - attempt to insert new merged label of @a and @b
1199 * Returns: ref counted new label if successful in inserting merge of a & b
1221 struct aa_label *new;
1229 new = aa_label_alloc(a->size + b->size, NULL, gfp);
1230 if (!new)
1233 label = label_merge_insert(new, a, b);
1234 label_free_or_put_new(label, new);
1894 * if component specified a new ns it becomes the new base
2011 * Returns: new label that is up to date
2021 struct aa_label *new, *tmp;
2029 new = aa_label_alloc(label->size, label->proxy, GFP_KERNEL);
2030 if (!new)
2041 new->vec[i] = aa_get_newest_profile(label->vec[i]);
2042 AA_BUG(!new->vec[i]);
2043 AA_BUG(!new->vec[i]->label.proxy);
2044 AA_BUG(!new->vec[i]->label.proxy->label);
2045 if (new->vec[i]->label.proxy != label->vec[i]->label.proxy)
2051 new->size -= aa_vec_unique(&new->vec[0], new->size,
2054 if (new->size == 1) {
2055 tmp = aa_get_label(&new->vec[0]->label);
2059 if (labels_set(label) != labels_set(new)) {
2061 tmp = aa_label_insert(labels_set(new), new);
2066 AA_BUG(labels_ns(label) != labels_ns(new));
2068 tmp = __label_insert(labels_set(label), new, true);
2073 label_free_or_put_new(tmp, new);