Lines Matching refs:resize

387 struct resize {
412 * 'old' refers to before the resize, 'new' after.
435 static int drop_blocks(struct resize *resize, unsigned int begin_index,
443 r = dm_btree_remove(&resize->info->btree_info, resize->root,
444 &key, &resize->root);
464 static int shrink(struct resize *resize)
474 if (resize->new_nr_full_blocks < resize->old_nr_full_blocks) {
475 begin = total_nr_blocks_needed(resize->new_nr_full_blocks,
476 resize->new_nr_entries_in_last_block);
477 end = total_nr_blocks_needed(resize->old_nr_full_blocks,
478 resize->old_nr_entries_in_last_block);
480 r = drop_blocks(resize, begin, end);
488 if (resize->new_nr_entries_in_last_block) {
489 r = shadow_ablock(resize->info, &resize->root,
490 resize->new_nr_full_blocks, &block, &ab);
494 trim_ablock(resize->info, ab, resize->new_nr_entries_in_last_block);
495 unlock_ablock(resize->info, block);
504 static int grow_extend_tail_block(struct resize *resize, uint32_t new_nr_entries)
510 r = shadow_ablock(resize->info, &resize->root,
511 resize->old_nr_full_blocks, &block, &ab);
515 fill_ablock(resize->info, ab, resize->value, new_nr_entries);
516 unlock_ablock(resize->info, block);
521 static int grow_add_tail_block(struct resize *resize)
523 return insert_new_ablock(resize->info, resize->size_of_block,
524 resize->max_entries,
525 resize->new_nr_full_blocks,
526 resize->new_nr_entries_in_last_block,
527 resize->value, &resize->root);
530 static int grow_needs_more_blocks(struct resize *resize)
533 unsigned int old_nr_blocks = resize->old_nr_full_blocks;
535 if (resize->old_nr_entries_in_last_block > 0) {
538 r = grow_extend_tail_block(resize, resize->max_entries);
543 r = insert_full_ablocks(resize->info, resize->size_of_block,
545 resize->new_nr_full_blocks,
546 resize->max_entries, resize->value,
547 &resize->root);
551 if (resize->new_nr_entries_in_last_block)
552 r = grow_add_tail_block(resize);
557 static int grow(struct resize *resize)
559 if (resize->new_nr_full_blocks > resize->old_nr_full_blocks)
560 return grow_needs_more_blocks(resize);
562 else if (resize->old_nr_entries_in_last_block)
563 return grow_extend_tail_block(resize, resize->new_nr_entries_in_last_block);
566 return grow_add_tail_block(resize);
668 struct resize resize;
675 resize.info = info;
676 resize.root = root;
677 resize.size_of_block = dm_bm_block_size(dm_tm_get_bm(info->btree_info.tm));
678 resize.max_entries = calc_max_entries(info->value_type.size,
679 resize.size_of_block);
681 resize.old_nr_full_blocks = old_size / resize.max_entries;
682 resize.old_nr_entries_in_last_block = old_size % resize.max_entries;
683 resize.new_nr_full_blocks = new_size / resize.max_entries;
684 resize.new_nr_entries_in_last_block = new_size % resize.max_entries;
685 resize.value = value;
687 r = ((new_size > old_size) ? grow : shrink)(&resize);
691 *new_root = resize.root;