Home | History | Annotate | Download | only in ext4_utils

Lines Matching full:alloc

30 static u8 *create_backing(struct block_allocation *alloc,
41 for (; alloc != NULL && backing_len > 0; get_next_region(alloc)) {
45 get_region(alloc, &region_block, &region_len);
57 static void reserve_indirect_block(struct block_allocation *alloc, int len)
59 if (reserve_oob_blocks(alloc, 1)) {
64 if (advance_blocks(alloc, len)) {
70 static void reserve_dindirect_block(struct block_allocation *alloc, int len)
72 if (reserve_oob_blocks(alloc, 1)) {
80 reserve_indirect_block(alloc, ind_block_len);
87 static void reserve_tindirect_block(struct block_allocation *alloc, int len)
89 if (reserve_oob_blocks(alloc, 1)) {
97 reserve_dindirect_block(alloc, dind_block_len);
103 static void fill_indirect_block(u32 *ind_block, int len, struct block_allocation *alloc)
107 ind_block[i] = get_block(alloc, i);
111 static void fill_dindirect_block(u32 *dind_block, int len, struct block_allocation *alloc)
117 ind_block = get_oob_block(alloc, 0);
118 if (advance_oob_blocks(alloc, 1)) {
130 fill_indirect_block(ind_block_data, ind_block_len, alloc);
132 if (advance_blocks(alloc, ind_block_len)) {
141 static void fill_tindirect_block(u32 *tind_block, int len, struct block_allocation *alloc)
147 dind_block = get_oob_block(alloc, 0);
148 if (advance_oob_blocks(alloc, 1)) {
160 fill_dindirect_block(dind_block_data, dind_block_len, alloc);
169 struct block_allocation *alloc, u32 *block_len)
175 inode->i_block[i] = get_block(alloc, i);
178 if (advance_blocks(alloc, len)) {
192 struct block_allocation *alloc, u32 *block_len)
196 int ind_block = get_oob_block(alloc, 0);
199 if (advance_oob_blocks(alloc, 1)) {
208 fill_indirect_block(ind_block_data, len, alloc);
210 if (advance_blocks(alloc, len)) {
224 struct block_allocation *alloc, u32 *block_len)
228 int dind_block = get_oob_block(alloc, 0);
231 if (advance_oob_blocks(alloc, 1)) {
240 fill_dindirect_block(dind_block_data, len, alloc);
242 if (advance_blocks(alloc, len)) {
256 struct block_allocation *alloc, u32 *block_len)
260 int tind_block = get_oob_block(alloc, 0);
263 if (advance_oob_blocks(alloc, 1)) {
272 fill_tindirect_block(tind_block_data, len, alloc);
274 if (advance_blocks(alloc, len)) {
283 static void reserve_all_indirect_blocks(struct block_allocation *alloc, u32 len)
289 advance_blocks(alloc, EXT4_NDIR_BLOCKS);
292 reserve_indirect_block(alloc, ind_block_len);
299 reserve_dindirect_block(alloc, dind_block_len);
306 reserve_tindirect_block(alloc, tind_block_len);
349 struct block_allocation *alloc, u32 block_len)
353 if (inode_attach_direct_blocks(inode, alloc, &count)) {
359 if (inode_attach_indirect_blocks(inode, alloc, &count)) {
366 if (inode_attach_dindirect_blocks(inode, alloc, &count)) {
373 if (inode_attach_tindirect_blocks(inode, alloc, &count)) {
384 rewind_alloc(alloc);
394 struct block_allocation *alloc = allocate_blocks(block_len + indirect_len);
396 if (alloc == NULL) {
401 return alloc;
407 struct block_allocation *alloc;
411 alloc = do_inode_allocate_indirect(block_len);
412 if (alloc == NULL) {
417 reserve_all_indirect_blocks(alloc, block_len);
418 rewind_alloc(alloc);
420 if (do_inode_attach_indirect(inode, alloc, block_len))
427 free_alloc(alloc);
431 struct block_allocation *alloc)
433 u32 block_len = block_allocation_len(alloc);
443 append_oob_allocation(alloc, 1);
444 u32 dind_block = get_oob_block(alloc, 0);
457 get_block(alloc, 0));
464 dind_block_data[i] = get_block(alloc, r);
468 ind_block_data[r * aux_info.blocks_per_ind + j - 1] = get_block(alloc, b);
493 struct block_allocation *alloc;
497 alloc = do_inode_allocate_indirect(block_len);
498 if (alloc == NULL) {
504 data = create_backing(alloc, backing_len);
509 rewind_alloc(alloc);
510 if (do_inode_attach_indirect(inode, alloc, block_len))
513 free_alloc(alloc);