Lines Matching refs:flex_gd
243 struct ext4_new_flex_group_data *flex_gd; in alloc_flex_gd() local
245 flex_gd = kmalloc_obj(*flex_gd, GFP_NOFS); in alloc_flex_gd()
246 if (flex_gd == NULL) in alloc_flex_gd()
250 flex_gd->resize_bg = max_resize_bg; in alloc_flex_gd()
253 last_group = o_group | (flex_gd->resize_bg - 1); in alloc_flex_gd()
255 flex_gd->resize_bg = 1 << fls(n_group - o_group); in alloc_flex_gd()
256 else if (n_group - last_group < flex_gd->resize_bg) in alloc_flex_gd()
257 flex_gd->resize_bg = 1 << max(fls(last_group - o_group), in alloc_flex_gd()
260 if (WARN_ON_ONCE(flex_gd->resize_bg > max_resize_bg)) in alloc_flex_gd()
261 flex_gd->resize_bg = max_resize_bg; in alloc_flex_gd()
263 flex_gd->groups = kmalloc_objs(struct ext4_new_group_data, in alloc_flex_gd()
264 flex_gd->resize_bg, GFP_NOFS); in alloc_flex_gd()
265 if (flex_gd->groups == NULL) in alloc_flex_gd()
268 flex_gd->bg_flags = kmalloc_array(flex_gd->resize_bg, sizeof(__u16), in alloc_flex_gd()
270 if (flex_gd->bg_flags == NULL) in alloc_flex_gd()
273 return flex_gd; in alloc_flex_gd()
276 kfree(flex_gd->groups); in alloc_flex_gd()
278 kfree(flex_gd); in alloc_flex_gd()
283 static void free_flex_gd(struct ext4_new_flex_group_data *flex_gd) in free_flex_gd() argument
285 kfree(flex_gd->bg_flags); in free_flex_gd()
286 kfree(flex_gd->groups); in free_flex_gd()
287 kfree(flex_gd); in free_flex_gd()
304 struct ext4_new_flex_group_data *flex_gd, in ext4_alloc_group_tables() argument
307 struct ext4_new_group_data *group_data = flex_gd->groups; in ext4_alloc_group_tables()
320 BUG_ON(flex_gd->count == 0 || group_data == NULL); in ext4_alloc_group_tables()
323 last_group = src_group + flex_gd->count - 1; in ext4_alloc_group_tables()
329 if (src_group >= group_data[0].group + flex_gd->count) in ext4_alloc_group_tables()
349 for (; bb_index < flex_gd->count; bb_index++) { in ext4_alloc_group_tables()
356 flex_gd->bg_flags[group] &= uninit_mask; in ext4_alloc_group_tables()
360 for (; ib_index < flex_gd->count; ib_index++) { in ext4_alloc_group_tables()
367 flex_gd->bg_flags[group] &= uninit_mask; in ext4_alloc_group_tables()
371 for (; it_index < flex_gd->count; it_index++) { in ext4_alloc_group_tables()
383 flex_gd->bg_flags[group + 1] &= uninit_mask; in ext4_alloc_group_tables()
390 flex_gd->bg_flags[group] &= uninit_mask; in ext4_alloc_group_tables()
395 for (i = 0; i < flex_gd->count; i++) { in ext4_alloc_group_tables()
406 "%u groups, flexbg size is %u:\n", flex_gd->count, in ext4_alloc_group_tables()
409 for (i = 0; i < flex_gd->count; i++) { in ext4_alloc_group_tables()
460 struct ext4_new_flex_group_data *flex_gd, in set_flexbg_block_bitmap() argument
477 group -= flex_gd->groups[0].group; in set_flexbg_block_bitmap()
483 if (flex_gd->bg_flags[group] & EXT4_BG_BLOCK_UNINIT) { in set_flexbg_block_bitmap()
484 BUG_ON(flex_gd->count > 1); in set_flexbg_block_bitmap()
492 bh = sb_getblk(sb, flex_gd->groups[group].block_bitmap); in set_flexbg_block_bitmap()
531 struct ext4_new_flex_group_data *flex_gd) in setup_new_flex_group_blocks() argument
538 struct ext4_new_group_data *group_data = flex_gd->groups; in setup_new_flex_group_blocks()
539 __u16 *bg_flags = flex_gd->bg_flags; in setup_new_flex_group_blocks()
546 BUG_ON(!flex_gd->count || !group_data || in setup_new_flex_group_blocks()
558 for (i = 0; i < flex_gd->count; i++, group++) { in setup_new_flex_group_blocks()
688 for (i = 1; i < flex_gd->count; i++) { in setup_new_flex_group_blocks()
695 flex_gd, in setup_new_flex_group_blocks()
708 flex_gd, in setup_new_flex_group_blocks()
1339 struct ext4_new_flex_group_data *flex_gd) in ext4_setup_new_descs() argument
1341 struct ext4_new_group_data *group_data = flex_gd->groups; in ext4_setup_new_descs()
1346 __u16 *bg_flags = flex_gd->bg_flags; in ext4_setup_new_descs()
1350 for (i = 0; i < flex_gd->count; i++, group_data++, bg_flags++) { in ext4_setup_new_descs()
1419 struct ext4_new_flex_group_data *flex_gd) in ext4_update_super() argument
1424 struct ext4_new_group_data *group_data = flex_gd->groups; in ext4_update_super()
1429 BUG_ON(flex_gd->count == 0 || group_data == NULL); in ext4_update_super()
1440 for (i = 0; i < flex_gd->count; i++) { in ext4_update_super()
1454 flex_gd->count); in ext4_update_super()
1456 flex_gd->count); in ext4_update_super()
1480 sbi->s_groups_count += flex_gd->count; in ext4_update_super()
1493 EXT4_INODES_PER_GROUP(sb) * flex_gd->count); in ext4_update_super()
1505 atomic_add(EXT4_INODES_PER_GROUP(sb) * flex_gd->count, in ext4_update_super()
1527 "%llu blocks(%llu free %llu reserved)\n", flex_gd->count, in ext4_update_super()
1537 struct ext4_new_flex_group_data *flex_gd) in ext4_flex_group_add() argument
1548 BUG_ON(!flex_gd->count || !flex_gd->groups || !flex_gd->bg_flags); in ext4_flex_group_add()
1555 err = setup_new_flex_group_blocks(sb, flex_gd); in ext4_flex_group_add()
1567 credit += 1 + DIV_ROUND_UP(flex_gd->count, EXT4_DESC_PER_BLOCK(sb)); in ext4_flex_group_add()
1581 group = flex_gd->groups[0].group; in ext4_flex_group_add()
1584 resize_inode, flex_gd->count); in ext4_flex_group_add()
1588 err = ext4_setup_new_descs(handle, sb, flex_gd); in ext4_flex_group_add()
1592 ext4_update_super(sb, flex_gd); in ext4_flex_group_add()
1603 int gdb_num_end = ((group + flex_gd->count - 1) / in ext4_flex_group_add()
1626 struct ext4_new_flex_group_data *flex_gd, in ext4_setup_next_flex_gd() argument
1631 struct ext4_new_group_data *group_data = flex_gd->groups; in ext4_setup_next_flex_gd()
1651 last_group = group | (flex_gd->resize_bg - 1); in ext4_setup_next_flex_gd()
1655 flex_gd->count = last_group - group + 1; in ext4_setup_next_flex_gd()
1657 for (i = 0; i < flex_gd->count; i++) { in ext4_setup_next_flex_gd()
1666 flex_gd->bg_flags[i] = EXT4_BG_BLOCK_UNINIT | in ext4_setup_next_flex_gd()
1669 flex_gd->bg_flags[i] |= EXT4_BG_INODE_ZEROED; in ext4_setup_next_flex_gd()
1671 flex_gd->bg_flags[i] = EXT4_BG_INODE_ZEROED; in ext4_setup_next_flex_gd()
1676 flex_gd->bg_flags[i - 1] &= ~EXT4_BG_BLOCK_UNINIT; in ext4_setup_next_flex_gd()
1702 struct ext4_new_flex_group_data flex_gd; in ext4_group_add() local
1758 flex_gd.count = 1; in ext4_group_add()
1759 flex_gd.groups = input; in ext4_group_add()
1760 flex_gd.bg_flags = &bg_flags; in ext4_group_add()
1761 err = ext4_flex_group_add(sb, inode, &flex_gd); in ext4_group_add()
1998 struct ext4_new_flex_group_data *flex_gd = NULL; in ext4_resize_fs() local
2145 flex_gd = alloc_flex_gd(flexbg_size, o_group, n_group); in ext4_resize_fs()
2146 if (flex_gd == NULL) { in ext4_resize_fs()
2154 while (ext4_setup_next_flex_gd(sb, flex_gd, n_blocks_count)) { in ext4_resize_fs()
2162 if (ext4_alloc_group_tables(sb, flex_gd, flexbg_size) != 0) in ext4_resize_fs()
2164 err = ext4_flex_group_add(sb, resize_inode, flex_gd); in ext4_resize_fs()
2172 free_flex_gd(flex_gd); in ext4_resize_fs()
2173 flex_gd = NULL; in ext4_resize_fs()
2182 if (flex_gd) in ext4_resize_fs()
2183 free_flex_gd(flex_gd); in ext4_resize_fs()