Lines Matching full:resize

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