Lines Matching refs:info
142 static int init_child(struct dm_btree_info *info, struct dm_btree_value_type *vt,
152 r = dm_tm_shadow_block(info->tm, root, &btree_node_validator,
160 inc_children(info->tm, result->n, vt);
168 static void exit_child(struct dm_btree_info *info, struct child *c)
170 dm_tm_unlock(info->tm, c->block);
199 static void __rebalance2(struct dm_btree_info *info, struct btree_node *parent,
226 dm_tm_dec(info->tm, dm_block_location(r->block));
237 static int rebalance2(struct shadow_spine *s, struct dm_btree_info *info,
246 r = init_child(info, vt, parent, left_index, &left);
250 r = init_child(info, vt, parent, left_index + 1, &right);
252 exit_child(info, &left);
256 __rebalance2(info, parent, &left, &right);
258 exit_child(info, &left);
259 exit_child(info, &right);
269 static void delete_center_node(struct dm_btree_info *info, struct btree_node *parent,
293 dm_tm_dec(info->tm, dm_block_location(c->block));
294 __rebalance2(info, parent, l, r);
300 static void redistribute3(struct dm_btree_info *info, struct btree_node *parent,
347 static void __rebalance3(struct dm_btree_info *info, struct btree_node *parent,
364 delete_center_node(info, parent, l, c, r, left, center, right,
367 redistribute3(info, parent, l, c, r, left, center, right,
371 static int rebalance3(struct shadow_spine *s, struct dm_btree_info *info,
381 r = init_child(info, vt, parent, left_index, &left);
385 r = init_child(info, vt, parent, left_index + 1, ¢er);
387 exit_child(info, &left);
391 r = init_child(info, vt, parent, left_index + 2, &right);
393 exit_child(info, &left);
394 exit_child(info, ¢er);
398 __rebalance3(info, parent, &left, ¢er, &right);
400 exit_child(info, &left);
401 exit_child(info, ¢er);
402 exit_child(info, &right);
408 struct dm_btree_info *info,
420 r = dm_tm_read_lock(info->tm, b, &btree_node_validator, &child);
425 dm_bm_block_size(dm_tm_get_bm(info->tm)));
427 dm_tm_dec(info->tm, dm_block_location(child));
428 dm_tm_unlock(info->tm, child);
440 r = rebalance2(s, info, vt, i);
443 r = rebalance2(s, info, vt, i - 1);
446 r = rebalance3(s, info, vt, i - 1);
469 static int remove_raw(struct shadow_spine *s, struct dm_btree_info *info,
497 r = rebalance_children(s, info, vt, key);
518 int dm_btree_remove(struct dm_btree_info *info, dm_block_t root,
521 unsigned level, last_level = info->levels - 1;
527 init_le64_type(info->tm, &le64_vt);
528 init_shadow_spine(&spine, info);
529 for (level = 0; level < info->levels; level++) {
530 r = remove_raw(&spine, info,
532 &info->value_type : &le64_vt),
545 if (info->value_type.dec)
546 info->value_type.dec(info->value_type.context,
562 static int remove_nearest(struct shadow_spine *s, struct dm_btree_info *info,
592 r = rebalance_children(s, info, vt, key);
615 static int remove_one(struct dm_btree_info *info, dm_block_t root,
619 unsigned level, last_level = info->levels - 1;
626 init_le64_type(info->tm, &le64_vt);
627 init_shadow_spine(&spine, info);
629 r = remove_raw(&spine, info, &le64_vt,
638 r = remove_nearest(&spine, info, &info->value_type,
655 if (info->value_type.dec)
656 info->value_type.dec(info->value_type.context,
672 int dm_btree_remove_leaves(struct dm_btree_info *info, dm_block_t root,
680 r = remove_one(info, root, first_key, end_key, &root, nr_removed);