*
* Returns: True on rebalance, false otherwise.
*/
-/* FIXME: full nodes need to create a new pivot */
static bool mas_wr_try_rebalance(struct ma_state *mas,
struct ma_node_info *src, unsigned char new_end,
struct ma_node_info *left, struct ma_node_info *right,
mns_mni_init(&state[i++], right, 0, src2.end + 1);
}
-#if 0
- if (left_store) {
- unsigned char space;
-
- printk("left store\n");
- /*
- * Left pushes data right.
- * Fill left up to split from l_src and ma_part - Func_1
- */
- if (mas->offset) {
- state[i].info = src;
- mns_mni_init(&state[i++], left, 0, mas->offset);
- }
-
- state[i].part = ma_part;
- state[i].use_part = true;
- space = split - mas->offset + 1;
- if (space >= ma_part->size) {
- mns_mni_init(&state[i++], left, 0, ma_part->size);
- } else {
- /* The insert part spans the left and right */
- mns_mni_init(&state[i], left, 0, space);
- if (mns_ends_in_null(&state[i])) {
- if (split + space < mt_slots[left->type]) {
- state[i].size++;
- split++;
- } else {
- state[i].size--;
- split--;
- }
- }
-
- space = ma_part->size - state[i].size;
- i++;
- /*
- * fill right from ma_part and l_src - Func_1
- */
- if (space) {
- state[i].part = ma_part;
- state[i].use_part = true;
- mns_mni_init(&state[i], right,
- state[i - 1].size, space);
- i++;
- }
- }
-
- if (split > insert_end) {
- state[i].info = src;
- mns_mni_init(&state[i], left, insert_end + 1,
- split - insert_end + 1);
-
- if (mns_ends_in_null(&state[i])) {
- state[i].size--;
- split--;
- }
- i++;
- }
-
- /*
- * fill right with right. - Func_2
- */
- state[i].info = &src2;
- mns_mni_init(&state[i++], right, split + 1, mas->end - split + 1);
- } else {
- printk("right store\n");
- /* Right pushes data left */
- state[i].info = &src2;
- mns_mni_init(&state[i], left, 0, src2.end + 1);
- i++;
- printk("outright cp left %p\n", src2.node);
- split -= src2.end;
- printk("Split is indexed into right now %u vs insert %u\n", split, mas->offset);
- if (split < mas->offset) {
- printk("Push more into left\n");
- state[i].info = src;
- mns_mni_init(&state[i], left, 0, split);
- printk("Check null\n");
- if (mns_ends_in_null(&state[i])) {
- printk("null split, adjust - 1\n");
- if (split + 1 < mas->offset) {
- state[i].size++;
- split++;
- } else {
- state[i].size--;
- split--;
- }
-
- }
- i++;
-
- if (split + 1 < mas->offset) {
- printk("cp src from %u - %u to right\n", split + 1, mas->offset - split + 1);
- state[++i].info = src;
- mns_mni_init(&state[i++], right, split + 1, mas->offset - split + 1);
- }
-
- printk("insert part\n");
- state[i].part = ma_part;
- mns_mni_init(&state[i], right, 0, ma_part->size);
- state[i++].use_part = true;
-
- } else {
- unsigned char l_size; /* Size of data remaining for left node */
-
- /* split >= mas->offset */
- if (mas->offset) {
- printk("Push up to offset into left\n");
- state[i].info = src;
- mns_mni_init(&state[i], left, 0, mas->offset);
- i++;
- }
-
- l_size = split - mas->offset + 1;
- if (l_size < ma_part->size) {
- unsigned char ma_remainder;
-
- state[i].part = ma_part;
- mns_mni_init(&state[i], left, 0, l_size);
- state[i].use_part = true;
-
- if (mns_ends_in_null(&state[i])) {
- printk("null split, adjust - 1\n");
- state[i].size--;
- l_size--;
- }
- i++;
-
- ma_remainder = ma_part->size - l_size;
- state[i].part = ma_part;
- mns_mni_init(&state[i], right, l_size,
- ma_remainder);
- state[i++].use_part = true;
- } else {
- state[i].part = ma_part;
- mns_mni_init(&state[i], left, 0, ma_part->size);
- state[i++].use_part = true;
- l_size -= ma_part->size;
-
- if (l_size) {
- state[i].info = src;
- mns_mni_init(&state[i], left, insert_end, l_size);
- i++;
- insert_end += l_size - 1;
- }
- }
- printk("Copy up to insert, do the insert maybe in two nodes\n");
- }
-
- /*
- * copy from right or ma_part to split to new left - Func_1
- * fill right from ma_part and r_src - Func_1
- */
-
-
- printk("\tat offset %u and insert is %u\n", split, mas->offset);
-
- if (insert_end < mas->end) {
- printk("End bit now %u vs %u\n", insert_end, mas->end);
- state[i].info = src;
- mns_mni_init(&state[i++], right, insert_end + 1,
- mas->end - insert_end + 1);
- }
- }
-#endif
-
mns_assemble(state, i);
mni_finalise(left);
mni_finalise(right);