Home | History | Annotate | Download | only in ext4_utils

Lines Matching refs:alloc

28 static u8 *create_backing(struct block_allocation *alloc,
39 for (; alloc != NULL && backing_len > 0; get_next_region(alloc)) {
43 get_region(alloc, &region_block, &region_len);
55 static void reserve_indirect_block(struct block_allocation *alloc, int len)
57 if (reserve_oob_blocks(alloc, 1)) {
62 if (advance_blocks(alloc, len)) {
68 static void reserve_dindirect_block(struct block_allocation *alloc, int len)
70 if (reserve_oob_blocks(alloc, 1)) {
78 reserve_indirect_block(alloc, ind_block_len);
85 static void reserve_tindirect_block(struct block_allocation *alloc, int len)
87 if (reserve_oob_blocks(alloc, 1)) {
95 reserve_dindirect_block(alloc, dind_block_len);
101 static void fill_indirect_block(u32 *ind_block, int len, struct block_allocation *alloc)
105 ind_block[i] = get_block(alloc, i);
109 static void fill_dindirect_block(u32 *dind_block, int len, struct block_allocation *alloc)
115 ind_block = get_oob_block(alloc, 0);
116 if (advance_oob_blocks(alloc, 1)) {
128 fill_indirect_block(ind_block_data, ind_block_len, alloc);
130 if (advance_blocks(alloc, ind_block_len)) {
139 static void fill_tindirect_block(u32 *tind_block, int len, struct block_allocation *alloc)
145 dind_block = get_oob_block(alloc, 0);
146 if (advance_oob_blocks(alloc, 1)) {
158 fill_dindirect_block(dind_block_data, dind_block_len, alloc);
167 struct block_allocation *alloc, u32 *block_len)
173 inode->i_block[i] = get_block(alloc, i);
176 if (advance_blocks(alloc, len)) {
190 struct block_allocation *alloc, u32 *block_len)
194 int ind_block = get_oob_block(alloc, 0);
197 if (advance_oob_blocks(alloc, 1)) {
206 fill_indirect_block(ind_block_data, len, alloc);
208 if (advance_blocks(alloc, len)) {
222 struct block_allocation *alloc, u32 *block_len)
226 int dind_block = get_oob_block(alloc, 0);
229 if (advance_oob_blocks(alloc, 1)) {
238 fill_dindirect_block(dind_block_data, len, alloc);
240 if (advance_blocks(alloc, len)) {
254 struct block_allocation *alloc, u32 *block_len)
258 int tind_block = get_oob_block(alloc, 0);
261 if (advance_oob_blocks(alloc, 1)) {
270 fill_tindirect_block(tind_block_data, len, alloc);
272 if (advance_blocks(alloc, len)) {
281 static void reserve_all_indirect_blocks(struct block_allocation *alloc, u32 len)
287 advance_blocks(alloc, EXT4_NDIR_BLOCKS);
290 reserve_indirect_block(alloc, ind_block_len);
297 reserve_dindirect_block(alloc, dind_block_len);
304 reserve_tindirect_block(alloc, tind_block_len);
347 struct block_allocation *alloc, u32 block_len)
351 if (inode_attach_direct_blocks(inode, alloc, &count)) {
357 if (inode_attach_indirect_blocks(inode, alloc, &count)) {
364 if (inode_attach_dindirect_blocks(inode, alloc, &count)) {
371 if (inode_attach_tindirect_blocks(inode, alloc, &count)) {
382 rewind_alloc(alloc);
392 struct block_allocation *alloc = allocate_blocks(block_len + indirect_len);
394 if (alloc == NULL) {
399 return alloc;
405 struct block_allocation *alloc;
409 alloc = do_inode_allocate_indirect(block_len);
410 if (alloc == NULL) {
415 reserve_all_indirect_blocks(alloc, block_len);
416 rewind_alloc(alloc);
418 if (do_inode_attach_indirect(inode, alloc, block_len))
425 free_alloc(alloc);
429 struct block_allocation *alloc)
431 u32 block_len = block_allocation_len(alloc);
441 append_oob_allocation(alloc, 1);
442 u32 dind_block = get_oob_block(alloc, 0);
455 get_block(alloc, 0));
462 dind_block_data[i] = get_block(alloc, r);
466 ind_block_data[r * aux_info.blocks_per_ind + j - 1] = get_block(alloc, b);
491 struct block_allocation *alloc;
495 alloc = do_inode_allocate_indirect(block_len);
496 if (alloc == NULL) {
502 data = create_backing(alloc, backing_len);
507 rewind_alloc(alloc);
508 if (do_inode_attach_indirect(inode, alloc, block_len))
511 free_alloc(alloc);