Lines Matching refs:info

161 static int init_child(struct dm_btree_info *info, struct dm_btree_value_type *vt,
171 r = dm_tm_shadow_block(info->tm, root, &btree_node_validator,
179 inc_children(info->tm, result->n, vt);
187 static void exit_child(struct dm_btree_info *info, struct child *c)
189 dm_tm_unlock(info->tm, c->block);
236 static int __rebalance2(struct dm_btree_info *info, struct btree_node *parent,
264 dm_tm_dec(info->tm, dm_block_location(r->block));
279 static int rebalance2(struct shadow_spine *s, struct dm_btree_info *info,
288 r = init_child(info, vt, parent, left_index, &left);
292 r = init_child(info, vt, parent, left_index + 1, &right);
294 exit_child(info, &left);
298 r = __rebalance2(info, parent, &left, &right);
300 exit_child(info, &left);
301 exit_child(info, &right);
311 static int delete_center_node(struct dm_btree_info *info, struct btree_node *parent,
344 dm_tm_dec(info->tm, dm_block_location(c->block));
345 return __rebalance2(info, parent, l, r);
351 static int redistribute3(struct dm_btree_info *info, struct btree_node *parent,
418 static int __rebalance3(struct dm_btree_info *info, struct btree_node *parent,
438 return delete_center_node(info, parent, l, c, r, left, center, right,
442 return redistribute3(info, parent, l, c, r, left, center, right,
446 static int rebalance3(struct shadow_spine *s, struct dm_btree_info *info,
456 r = init_child(info, vt, parent, left_index, &left);
460 r = init_child(info, vt, parent, left_index + 1, &center);
462 exit_child(info, &left);
466 r = init_child(info, vt, parent, left_index + 2, &right);
468 exit_child(info, &left);
469 exit_child(info, &center);
473 r = __rebalance3(info, parent, &left, &center, &right);
475 exit_child(info, &left);
476 exit_child(info, &center);
477 exit_child(info, &right);
483 struct dm_btree_info *info,
495 r = dm_tm_read_lock(info->tm, b, &btree_node_validator, &child);
500 dm_bm_block_size(dm_tm_get_bm(info->tm)));
502 dm_tm_dec(info->tm, dm_block_location(child));
503 dm_tm_unlock(info->tm, child);
515 r = rebalance2(s, info, vt, i);
518 r = rebalance2(s, info, vt, i - 1);
521 r = rebalance3(s, info, vt, i - 1);
544 static int remove_raw(struct shadow_spine *s, struct dm_btree_info *info,
573 r = rebalance_children(s, info, vt, key);
594 int dm_btree_remove(struct dm_btree_info *info, dm_block_t root,
597 unsigned int level, last_level = info->levels - 1;
603 init_le64_type(info->tm, &le64_vt);
604 init_shadow_spine(&spine, info);
605 for (level = 0; level < info->levels; level++) {
606 r = remove_raw(&spine, info,
608 &info->value_type : &le64_vt),
621 if (info->value_type.dec)
622 info->value_type.dec(info->value_type.context,
638 static int remove_nearest(struct shadow_spine *s, struct dm_btree_info *info,
669 r = rebalance_children(s, info, vt, key);
692 static int remove_one(struct dm_btree_info *info, dm_block_t root,
696 unsigned int level, last_level = info->levels - 1;
703 init_le64_type(info->tm, &le64_vt);
704 init_shadow_spine(&spine, info);
706 r = remove_raw(&spine, info, &le64_vt,
715 r = remove_nearest(&spine, info, &info->value_type,
732 if (info->value_type.dec)
733 info->value_type.dec(info->value_type.context,
749 int dm_btree_remove_leaves(struct dm_btree_info *info, dm_block_t root,
757 r = remove_one(info, root, first_key, end_key, &root, nr_removed);