void ext4_create_resize_inode() { struct block_allocation *reserve_inode_alloc = create_allocation(); u32 reserve_inode_len = 0; unsigned int i; struct ext4_inode *inode = get_inode(EXT4_RESIZE_INO); if (inode == NULL) { error("failed to get resize inode"); return; } for (i = 0; i < aux_info.groups; i++) { if (ext4_bg_has_super_block(i)) { u64 group_start_block = aux_info.first_data_block + i * info.blocks_per_group; u32 reserved_block_start = group_start_block + 1 + aux_info.bg_desc_blocks; u32 reserved_block_len = info.bg_desc_reserve_blocks; append_region(reserve_inode_alloc, reserved_block_start, reserved_block_len, i); reserve_inode_len += reserved_block_len; } } inode_attach_resize(inode, reserve_inode_alloc); inode->i_mode = S_IFREG | S_IRUSR | S_IWUSR; inode->i_links_count = 1; free_alloc(reserve_inode_alloc); }
TEST_F(MemoryTest, AppendRegion) { Region *region = test_mmr->base_region; unsigned int original_size = remaining_space(test_mmr); unsigned int size = 512; Region *end_of_current = (Region *) (region->data + (uintptr_t) size); append_region(test_mmr, end_of_current, size); EXPECT_EQ(size - sizeof(Region), end_of_current->size); EXPECT_EQ(1, end_of_current->free); EXPECT_EQ(original_size - sizeof(Region), remaining_space(test_mmr)); }
int main (void){ int i; region temp_region; list* test = create_list(); list* lptr; for(i = 0; i < 10; i++){ temp_region.region_start = i; temp_region.region_stop = i+1; push_region(temp_region, test); } temp_region.region_start = 100; temp_region.region_stop = 200; append_region(temp_region, test); //printf("top->%d %d\n", top_region(test).region_start, top_region(test).region_stop); walknprint(test, lptr); printf("list is %d long\n", get_length(test)); //printf("found important: 0x%x %d %d\n", lptr, lptr->the_region.region_start, lptr->the_region.region_stop); temp_region = tail_pull(test); printf("pulled tail: %d %d\n", temp_region.region_start, temp_region.region_stop); for(i = 0; i < 10; i++){ temp_region = pop_region(test); printf("pop->%d %d\n", temp_region.region_start, temp_region.region_stop); } remove_list(test); return(0); }