part->pivots[0] = wr_l->mas->index - 1;
part->slots[0] = wr_l->content;
part->size++;
+ printk("part 0 %lu\n", part->pivots[0]);
}
part->pivots[part->size] = wr_r->mas->last;
part->slots[part->size] = wr_l->entry;
part->size++;
+ printk("part 1 %lu\n", part->pivots[part->size-1]);
if (wr_r->end_piv > wr_r->mas->last) {
part->pivots[part->size] = wr_r->end_piv;
part->slots[part->size] = src->slots[wr_r->offset_end];
part->size++;
+ printk("part 2 %lu\n", part->pivots[part->size-1]);
}
part->skip = wr_r->offset_end - wr_l->mas->offset + wr_l->mas->end + 1;
part->leaf = true;
- printk("%s skip %u\n", __func__, part->skip);
+ printk("%s skip %u (%u - %u + %u + 1)\n", __func__, part->skip,
+ wr_r->offset_end, wr_l->mas->offset, wr_l->mas->end);
}
static inline
void mni_node_part_init(struct ma_node_part *part,
mt_dump(mas->tree, mt_dump_dec);
printk("Storing %lu - %lu -> %p\n", mas->index, mas->last, wr_mas->entry);
+ if (mt_is_alloc(mas->tree))
+ sd.is_alloc = true;
+ else
+ sd.is_alloc = false;
+
/* FIXME: Can this happen? probably not? */
if (unlikely(!mas->index && mas->last == ULONG_MAX))
return mas_new_root(mas, wr_mas->entry);
printk("r_wr_mas\n");
r_mas.index = r_mas.last;
mas_wr_walk_index(&r_wr_mas);
+ if (!wr_mas->entry && r_mas.offset == r_mas.end) {
+ printk("Check next node for null in slot 0\n");
+ if (mas_next_range(&r_mas, ULONG_MAX)) {
+ mas_prev_range(&r_mas, 0);
+ } else {
+ r_wr_mas.offset_end = 0;
+ r_wr_mas.node = mte_to_node(r_mas.node);
+ r_wr_mas.type = mte_node_type(r_mas.node);
+ r_wr_mas.slots = ma_slots(r_wr_mas.node, r_wr_mas.type);
+ r_wr_mas.pivots = ma_pivots(r_wr_mas.node, r_wr_mas.type);
+ }
+ }
r_mas.index = r_mas.min;
r_mas.offset = 0;
mas_wr_end_piv(&r_wr_mas);
/* Set up left side. */
mas_wr_walk_index(wr_mas);
- printk("\nwr_mas %lu\n", mas->min);
+ mas_wr_extend_null(wr_mas);
+ printk("\nwr_mas min %lu write covers %u - %u\n", mas->min, mas->offset, wr_mas->offset_end);
printk("At %p and r_mas %p\n", mas_mn(mas), mas_mn(&r_mas));
sd.insert = mas->offset;
sd.src_ins_end = wr_mas->offset_end + mas->end + 1;
wr_mas->offset_end = r_wr_mas.offset_end + mas->end + 1;
+ printk("wr_mas offset end is %u\n", wr_mas->offset_end);
printk("src is %p slots is %p\n", right.node, right.slots);
mns_node_part_span_leaf_init(&part, wr_mas, &r_wr_mas, &right);
do {