Lines Matching refs:info

129 int dm_btree_empty(struct dm_btree_info *info, dm_block_t *root)
137 r = new_block(info, &b);
141 block_size = dm_bm_block_size(dm_tm_get_bm(info->tm));
142 max_entries = calc_max_entries(info->value_type.size, block_size);
149 n->header.value_size = cpu_to_le32(info->value_type.size);
152 unlock_block(info, b);
174 struct dm_btree_info *info;
206 static bool is_internal_level(struct dm_btree_info *info, struct frame *f)
208 return f->level < (info->levels - 1);
248 if (flags & INTERNAL_NODE || is_internal_level(s->info, f))
273 int dm_btree_del(struct dm_btree_info *info, dm_block_t root)
286 s->info = info;
287 s->tm = info->tm;
316 } else if (is_internal_level(info, f)) {
324 if (info->value_type.dec)
325 info->value_type.dec(info->value_type.context,
374 int dm_btree_lookup(struct dm_btree_info *info, dm_block_t root,
377 unsigned int level, last_level = info->levels - 1;
383 init_ro_spine(&spine, info);
384 for (level = 0; level < info->levels; level++) {
390 size = info->value_type.size;
419 static int dm_btree_lookup_next_single(struct dm_btree_info *info, dm_block_t root,
427 r = bn_read_lock(info, root, &node);
449 r = dm_btree_lookup_next_single(info, value64(n, i), key, rkey, value_le);
452 r = dm_btree_lookup_next_single(info, value64(n, i), key, rkey, value_le);
463 memcpy(value_le, value_ptr(n, i), info->value_type.size);
466 dm_tm_unlock(info->tm, node);
470 int dm_btree_lookup_next(struct dm_btree_info *info, dm_block_t root,
478 init_ro_spine(&spine, info);
479 for (level = 0; level < info->levels - 1u; level++) {
494 r = dm_btree_lookup_next_single(info, root, keys[level], rkey, value_le);
664 r = new_block(s->info, &right);
686 unlock_block(s->info, right);
692 unlock_block(s->info, right);
695 unlock_block(s->info, left);
707 static int shadow_child(struct dm_btree_info *info, struct dm_btree_value_type *vt,
717 r = dm_tm_shadow_block(info->tm, root, &btree_node_validator,
725 inc_children(info->tm, node, vt);
752 r = shadow_child(s->info, vt, pn, parent_index + 1, &right);
758 r = shadow_child(s->info, vt, pn, parent_index - 1, &left);
763 r = new_block(s->info, &middle);
786 unlock_block(s->info, left);
788 unlock_block(s->info, middle);
791 unlock_block(s->info, right);
799 unlock_block(s->info, middle);
800 unlock_block(s->info, right);
803 unlock_block(s->info, left);
804 unlock_block(s->info, right);
807 unlock_block(s->info, left);
808 unlock_block(s->info, middle);
851 sizeof(__le64) : s->info->value_type.size;
854 r = new_block(s->info, &left);
869 r = new_block(s->info, &right);
871 unlock_block(s->info, left);
892 dm_tm_get_bm(s->info->tm))));
905 unlock_block(s->info, left);
906 unlock_block(s->info, right);
922 r = shadow_child(s->info, vt, parent, parent_index - 1, &sib);
932 unlock_block(s->info, s->nodes[1]);
935 unlock_block(s->info, sib);
951 r = shadow_child(s->info, vt, parent, parent_index + 1, &sib);
961 unlock_block(s->info, sib);
963 unlock_block(s->info, s->nodes[1]);
973 static int get_node_free_space(struct dm_btree_info *info, dm_block_t b, unsigned int *space)
980 r = bn_read_lock(info, b, &block);
988 unlock_block(info, block);
1014 r = dm_tm_block_is_shared(s->info->tm, left_b, &left_shared);
1019 r = get_node_free_space(s->info, left_b, &free_space);
1032 r = dm_tm_block_is_shared(s->info->tm, right_b, &right_shared);
1037 r = get_node_free_space(s->info, right_b, &free_space);
1164 r = shadow_step(s, root, &s->info->value_type);
1202 int btree_get_overwrite_leaf(struct dm_btree_info *info, dm_block_t root,
1209 BUG_ON(info->levels > 1);
1210 init_shadow_spine(&spine, info);
1234 static int insert(struct dm_btree_info *info, dm_block_t root,
1240 unsigned int level, index = -1, last_level = info->levels - 1;
1246 init_le64_type(info->tm, &le64_type);
1247 init_shadow_spine(&spine, info);
1249 for (level = 0; level < (info->levels - 1); level++) {
1260 r = dm_btree_empty(info, &new_tree);
1277 r = btree_insert_raw(&spine, block, &info->value_type,
1288 r = insert_at(info->value_type.size, n, index,
1296 if (info->value_type.dec &&
1297 (!info->value_type.equal ||
1298 !info->value_type.equal(
1299 info->value_type.context,
1302 info->value_type.dec(info->value_type.context,
1306 value, info->value_type.size);
1321 int dm_btree_insert(struct dm_btree_info *info, dm_block_t root,
1325 return insert(info, root, keys, value, new_root, NULL);
1329 int dm_btree_insert_notify(struct dm_btree_info *info, dm_block_t root,
1334 return insert(info, root, keys, value, new_root, inserted);
1377 static int dm_btree_find_key(struct dm_btree_info *info, dm_block_t root,
1383 init_ro_spine(&spine, info);
1384 for (level = 0; level < info->levels; level++) {
1386 level == info->levels - 1 ? NULL : &root);
1401 int dm_btree_find_highest_key(struct dm_btree_info *info, dm_block_t root,
1404 return dm_btree_find_key(info, root, true, result_keys);
1408 int dm_btree_find_lowest_key(struct dm_btree_info *info, dm_block_t root,
1411 return dm_btree_find_key(info, root, false, result_keys);
1421 static int walk_node(struct dm_btree_info *info, dm_block_t block,
1431 r = bn_read_lock(info, block, &node);
1440 r = walk_node(info, value64(n, i), fn, context);
1452 dm_tm_unlock(info->tm, node);
1456 int dm_btree_walk(struct dm_btree_info *info, dm_block_t root,
1460 BUG_ON(info->levels > 1);
1461 return walk_node(info, root, fn, context);
1473 struct dm_block_manager *bm = dm_tm_get_bm(c->info->tm);
1475 BUG_ON(c->info->value_type.size != sizeof(value_le));
1502 r = bn_read_lock(c->info, b, &n->b);
1518 unlock_block(c->info, c->nodes[c->depth].b);
1571 int dm_btree_cursor_begin(struct dm_btree_info *info, dm_block_t root,
1576 c->info = info;
1631 memcpy(value_le, value_ptr(bn, n->index), c->info->value_type.size);