struct ma_node_part {
unsigned char size;
unsigned char pos;
- unsigned char dst_max_off;
unsigned long pivots[3];
void *slots[3];
unsigned long gaps[2];
- //bool unfinished;
unsigned char skip;
bool leaf;
};
part->size++;
}
- //part->unfinished = false;
- part->dst_max_off = 255;
part->skip = wr_mas->offset_end - wr_mas->mas->offset + 1;
part->leaf = true;
}
}
part->pos = 0;
- //part->unfinished = false;
- part->dst_max_off = 255;
part->skip = 1;
part->leaf = false;
}
-#if 0
-static __always_inline
-void mni_insert_part(struct ma_node_part *part,
- struct ma_node_info *dst)
-{
- while (dst->offset < mt_slots[dst->type]) {
- dst->slots[dst->offset] = part->slots[part->pos];
- if (dst->gaps)
- dst->gaps[dst->offset] = part->gaps[part->pos];
-
- if (!ma_is_leaf(dst->type))
- mte_set_parent(part->slots[part->pos],
- dst->enode, dst->offset);
-
- if (dst->offset < mt_pivots[dst->type])
- dst->pivots[dst->offset] = part->pivots[part->pos];
-
- dst->offset++;
- dst->max = part->pivots[part->pos];
- part->pos++;
- if (part->pos >= part->size) {
- part->unfinished = false;
- return; /* Nothing to do */
- }
-
- if (dst->offset > part->dst_max_off) {
- /* push to next node */
- part->unfinished = true;
- return;
- }
-
- }
-
- /* Out of room.. */
- //WARN_ON_ONCE(1);
- part->unfinished = true;
-}
-#endif
-
static inline
void _mni_node_init(struct ma_node_info *mni, struct maple_node *node,
enum maple_type type)
static int state_setup(struct ma_node_state *state, struct ma_node_info *src,
struct ma_node_info *dst, struct ma_node_part *part,
- struct split_data *sd, int node_off)
+ struct split_data *sd)
{
unsigned char copied;
unsigned char inc_off;
*/
copied = min(sd->space, sd->insert - sd->offset);
} else {
- copied = min(sd->space, (src->end - node_off + 1));
+ copied = min(sd->space, (src->end - src->offset + 1));
}
BUG_ON(copied == 0);
- mns_mni_init(state, dst, node_off, copied);
+ mns_mni_init(state, dst, src->offset, copied);
inc_off = copied;
}
sd->offset += copied;
+ src->offset += copied;
sd->space -= copied;
printk("offset %u split %u\n", sd->offset, sd->split);
return inc_off;
/* Offset into the destination data where the insert ends */
sd->insert_end = sd->insert + part->size - 1;
to = left;
- node_off = 0; /* src */
do {
/* Configure one state */
state = &sd->states[sd->len];
- node_off += state_setup(state, src, to, part, sd, node_off);
+ state_setup(state, src, to, part, sd);
/*
* Potentially remove one entry from the state if it's NULL and
sd->split++;
sd->offset++;
sd->space--;
- node_off++;
+ src->offset++;
} else {
sd->split--;
sd->offset--;
if (state->use_part) {
part->pos--;
} else {
- node_off--;
+ src->offset--;
}
if (state->size == 1)
sd->len--;
sd->split = 255;
}
sd->len++;
- printk("node off %u src end %u\n", node_off, src->end);
- } while (node_off <= src->end);
+ printk("node off %u src end %u\n", src->offset, src->end);
+ } while (src->offset <= src->end);
}