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);
}
Example #2
0
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));
}
Example #3
0
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);
}