Commit 7e972668 authored by John Johansen's avatar John Johansen Committed by Tim Gardner

Revert "UBUNTU: SAUCE: fixup: cleanup return handling of labels"

BugLink: http://bugs.launchpad.net/bugs/1379535

This reverts commit 90517b72df39a6cdf78d8bc50045c533d3844f73.
Signed-off-by: default avatarTim Gardner <tim.gardner@canonical.com>
parent 130e293d
......@@ -970,6 +970,9 @@ static struct aa_label *__label_merge_insert(struct aa_labelset *ls,
AA_BUG(!l);
AA_BUG(l->size < a->size + b->size);
if (a == b)
return aa_get_label(a);
label_for_each_in_merge(i, a, b, next) {
if (PROFILE_INVALID(next)) {
l->ent[k] = aa_get_newest_profile(next);
......@@ -1152,6 +1155,12 @@ struct aa_label *aa_label_merge(struct aa_label *a, struct aa_label *b,
write_lock_irqsave(&ls->lock, flags);
label = __label_merge_insert(ls, new, a, b);
write_unlock_irqrestore(&ls->lock, flags);
if (label != new) {
/* new may not be fully setup so no put_label */
aa_label_free(new);
new = NULL;
}
aa_put_label(new);
out:
aa_put_label(a);
......@@ -1191,7 +1200,12 @@ struct aa_label *aa_label_vec_merge(struct aa_profile **vec, int len,
write_lock_irqsave(&ls->lock, flags);
label = __aa_label_insert(ls, new, false);
write_unlock_irqrestore(&ls->lock, flags);
aa_put_label(new);
if (label != new)
/* not fully constructed don't put */
aa_label_free(new);
else
/* extra ref */
aa_put_label(new);
return label;
}
......@@ -1838,22 +1852,38 @@ static struct aa_label *__label_update(struct aa_label *label)
/* updated label invalidated by being removed/renamed from labelset */
if (invcount) {
l->size -= aa_sort_and_merge_profiles(l->size, &l->ent[0]);
if (labels_set(label) != labels_set(l)) {
if (labels_set(label) == labels_set(l)) {
goto insert;
} else {
aa_label_remove(labels_set(label), label);
write_unlock_irqrestore(&ls->lock, flags);
tmp = aa_label_insert(labels_set(l), l);
goto out;
goto other_ls_insert;
}
} else
} else {
AA_BUG(labels_ns(label) != labels_ns(l));
goto insert;
}
insert:
tmp = __aa_label_insert(labels_set(label), l, true);
if (tmp != l) {
aa_label_free(l);
l = tmp;
} else
aa_put_label(l); /* extr ref */
write_unlock_irqrestore(&ls->lock, flags);
out:
aa_put_label(l);
return l;
return tmp;
other_ls_insert:
write_unlock_irqrestore(&ls->lock, flags);
tmp = aa_label_insert(labels_set(l), l);
if (tmp != l) {
aa_put_label(l);
l = tmp;
} else
aa_put_label(l); /* extra ref */
return l;
}
/**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment