r_mas = *mas;
r_mas.index = r_mas.last;
mas_wr_walk_index(&r_wr_mas);
+ mas_wr_end_piv(&r_wr_mas);
+ printk("end piv is %lu\n", r_wr_mas.end_piv);
if (!wr_mas->entry) {
- printk("Check next range for null from %p[%u]\n", r_mas.node, r_mas.offset);
- if (mas_next_range(&r_mas, ULONG_MAX)) {
- printk("next range is not null\n");
- mas_prev_range(&r_mas, 0);
- } else {
- printk("next range IS null %p[%u]\n", r_mas.node, r_mas.offset);
- r_wr_mas.offset_end = r_mas.offset;
- if (r_wr_mas.node != mte_to_node(r_mas.node)) {
- printk("new node\n");
- 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);
- }
- if (r_wr_mas.offset_end == r_mas.end) {
- r_mas.last = r_mas.max;
+ printk("extend end null maybe\n");
+ if (!r_wr_mas.slots[r_wr_mas.offset_end]) {
+ r_mas.last = r_wr_mas.end_piv;
+ } else if (r_wr_mas.end_piv != ULONG_MAX) {
+ printk("Check next range for null from %p[%u]\n", r_mas.node, r_mas.offset);
+ if (mas_next_range(&r_mas, ULONG_MAX)) {
+ printk("next range is not null\n");
+ mas_prev_range(&r_mas, 0);
} else {
- r_mas.last = r_wr_mas.pivots[r_wr_mas.offset_end];
+ printk("next range IS null %p[%u]\n", r_mas.node, r_mas.offset);
+ r_wr_mas.offset_end = r_mas.offset;
+ if (r_wr_mas.node != mte_to_node(r_mas.node)) {
+ printk("new node\n");
+ 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);
+ }
+ if (r_wr_mas.offset_end == r_mas.end) {
+ r_mas.last = r_mas.max;
+ } else {
+ r_mas.last = r_wr_mas.pivots[r_wr_mas.offset_end];
+ }
}
}
}
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);
mas_wr_extend_null(wr_mas);
- if (unlikely(!mas->index && r_mas.last == ULONG_MAX))
+ printk("index %lu last %lu\n", mas->index, r_mas.last);
+ if (unlikely(!mas->index && r_mas.last == ULONG_MAX)) {
+ mas->last = ULONG_MAX;
return mas_new_root(mas, wr_mas->entry);
+ }
printk("\nwr_mas min %lu write covers %u - %u\n", mas->min, mas->offset, wr_mas->offset_end);