Lines Matching refs:segno
805 static void __locate_dirty_segment(struct f2fs_sb_info *sbi, unsigned int segno, in __locate_dirty_segment() argument
811 if (IS_CURSEG(sbi, segno)) in __locate_dirty_segment()
814 if (!test_and_set_bit(segno, dirty_i->dirty_segmap[dirty_type])) in __locate_dirty_segment()
818 struct seg_entry *sentry = get_seg_entry(sbi, segno); in __locate_dirty_segment()
825 if (!test_and_set_bit(segno, dirty_i->dirty_segmap[t])) in __locate_dirty_segment()
829 unsigned int secno = GET_SEC_FROM_SEG(sbi, segno); in __locate_dirty_segment()
831 get_valid_blocks(sbi, segno, true); in __locate_dirty_segment()
842 static void __remove_dirty_segment(struct f2fs_sb_info *sbi, unsigned int segno, in __remove_dirty_segment() argument
848 if (test_and_clear_bit(segno, dirty_i->dirty_segmap[dirty_type])) in __remove_dirty_segment()
852 struct seg_entry *sentry = get_seg_entry(sbi, segno); in __remove_dirty_segment()
855 if (test_and_clear_bit(segno, dirty_i->dirty_segmap[t])) in __remove_dirty_segment()
858 valid_blocks = get_valid_blocks(sbi, segno, true); in __remove_dirty_segment()
860 clear_bit(GET_SEC_FROM_SEG(sbi, segno), in __remove_dirty_segment()
863 clear_bit(segno, SIT_I(sbi)->invalid_segmap); in __remove_dirty_segment()
867 unsigned int secno = GET_SEC_FROM_SEG(sbi, segno); in __remove_dirty_segment()
886 static void locate_dirty_segment(struct f2fs_sb_info *sbi, unsigned int segno) in locate_dirty_segment() argument
892 if (segno == NULL_SEGNO || IS_CURSEG(sbi, segno)) in locate_dirty_segment()
895 usable_blocks = f2fs_usable_blks_in_seg(sbi, segno); in locate_dirty_segment()
898 valid_blocks = get_valid_blocks(sbi, segno, false); in locate_dirty_segment()
899 ckpt_valid_blocks = get_ckpt_valid_blocks(sbi, segno, false); in locate_dirty_segment()
903 __locate_dirty_segment(sbi, segno, PRE); in locate_dirty_segment()
904 __remove_dirty_segment(sbi, segno, DIRTY); in locate_dirty_segment()
906 __locate_dirty_segment(sbi, segno, DIRTY); in locate_dirty_segment()
909 __remove_dirty_segment(sbi, segno, DIRTY); in locate_dirty_segment()
919 unsigned int segno; in f2fs_dirty_to_prefree() local
922 for_each_set_bit(segno, dirty_i->dirty_segmap[DIRTY], MAIN_SEGS(sbi)) { in f2fs_dirty_to_prefree()
923 if (get_valid_blocks(sbi, segno, false)) in f2fs_dirty_to_prefree()
925 if (IS_CURSEG(sbi, segno)) in f2fs_dirty_to_prefree()
927 __locate_dirty_segment(sbi, segno, PRE); in f2fs_dirty_to_prefree()
928 __remove_dirty_segment(sbi, segno, DIRTY); in f2fs_dirty_to_prefree()
942 unsigned int segno; in f2fs_get_unusable_blocks() local
945 for_each_set_bit(segno, dirty_i->dirty_segmap[DIRTY], MAIN_SEGS(sbi)) { in f2fs_get_unusable_blocks()
946 se = get_seg_entry(sbi, segno); in f2fs_get_unusable_blocks()
948 holes[NODE] += f2fs_usable_blks_in_seg(sbi, segno) - in f2fs_get_unusable_blocks()
951 holes[DATA] += f2fs_usable_blks_in_seg(sbi, segno) - in f2fs_get_unusable_blocks()
978 unsigned int segno = 0; in get_free_segment() local
981 for_each_set_bit(segno, dirty_i->dirty_segmap[DIRTY], MAIN_SEGS(sbi)) { in get_free_segment()
982 if (get_valid_blocks(sbi, segno, false)) in get_free_segment()
984 if (get_ckpt_valid_blocks(sbi, segno, false)) in get_free_segment()
987 return segno; in get_free_segment()
1107 unsigned int segno; in __check_sit_bitmap() local
1113 segno = GET_SEGNO(sbi, blk); in __check_sit_bitmap()
1114 sentry = get_seg_entry(sbi, segno); in __check_sit_bitmap()
1117 if (end < START_BLOCK(sbi, segno + 1)) in __check_sit_bitmap()
1124 blk = START_BLOCK(sbi, segno + 1); in __check_sit_bitmap()
1999 unsigned int segno; in set_prefree_as_free_segments() local
2002 for_each_set_bit(segno, dirty_i->dirty_segmap[PRE], MAIN_SEGS(sbi)) in set_prefree_as_free_segments()
2003 __set_test_and_free(sbi, segno, false); in set_prefree_as_free_segments()
2174 static bool __mark_sit_entry_dirty(struct f2fs_sb_info *sbi, unsigned int segno) in __mark_sit_entry_dirty() argument
2178 if (!__test_and_set_bit(segno, sit_i->dirty_sentries_bitmap)) { in __mark_sit_entry_dirty()
2187 unsigned int segno, int modified) in __set_sit_entry_type() argument
2189 struct seg_entry *se = get_seg_entry(sbi, segno); in __set_sit_entry_type()
2193 __mark_sit_entry_dirty(sbi, segno); in __set_sit_entry_type()
2199 unsigned int segno = GET_SEGNO(sbi, blkaddr); in get_segment_mtime() local
2201 if (segno == NULL_SEGNO) in get_segment_mtime()
2203 return get_seg_entry(sbi, segno)->mtime; in get_segment_mtime()
2210 unsigned int segno = GET_SEGNO(sbi, blkaddr); in update_segment_mtime() local
2214 if (segno == NULL_SEGNO) in update_segment_mtime()
2217 se = get_seg_entry(sbi, segno); in update_segment_mtime()
2232 unsigned int segno, offset; in update_sit_entry() local
2239 segno = GET_SEGNO(sbi, blkaddr); in update_sit_entry()
2241 se = get_seg_entry(sbi, segno); in update_sit_entry()
2246 (new_vblocks > f2fs_usable_blks_in_seg(sbi, segno)))); in update_sit_entry()
2318 __mark_sit_entry_dirty(sbi, segno); in update_sit_entry()
2324 get_sec_entry(sbi, segno)->valid_blocks += del; in update_sit_entry()
2329 unsigned int segno = GET_SEGNO(sbi, addr); in f2fs_invalidate_blocks() local
2346 locate_dirty_segment(sbi, segno); in f2fs_invalidate_blocks()
2354 unsigned int segno, offset; in f2fs_is_checkpointed_data() local
2363 segno = GET_SEGNO(sbi, blkaddr); in f2fs_is_checkpointed_data()
2364 se = get_seg_entry(sbi, segno); in f2fs_is_checkpointed_data()
2421 struct page *f2fs_get_sum_page(struct f2fs_sb_info *sbi, unsigned int segno) in f2fs_get_sum_page() argument
2425 return f2fs_get_meta_page_retry(sbi, GET_SUM_BLOCK(sbi, segno)); in f2fs_get_sum_page()
2473 unsigned int segno = curseg->segno + 1; in is_next_segment_free() local
2476 if (segno < MAIN_SEGS(sbi) && segno % sbi->segs_per_sec) in is_next_segment_free()
2477 return !test_bit(segno, free_i->free_segmap); in is_next_segment_free()
2489 unsigned int segno, secno, zoneno; in get_new_segment() local
2501 segno = find_next_zero_bit(free_i->free_segmap, in get_new_segment()
2503 if (segno < GET_SEG_FROM_SEC(sbi, hint + 1)) in get_new_segment()
2533 segno = GET_SEG_FROM_SEC(sbi, secno); in get_new_segment()
2566 f2fs_bug_on(sbi, test_bit(segno, free_i->free_segmap)); in get_new_segment()
2567 __set_inuse(sbi, segno); in get_new_segment()
2568 *newseg = segno; in get_new_segment()
2579 curseg->segno = curseg->next_segno; in reset_curseg()
2580 curseg->zone = GET_ZONE_FROM_SEG(sbi, curseg->segno); in reset_curseg()
2593 __set_sit_entry_type(sbi, seg_type, curseg->segno, modified); in reset_curseg()
2605 return curseg->segno; in __get_next_segno()
2625 return curseg->segno; in __get_next_segno()
2636 unsigned int segno = curseg->segno; in new_curseg() local
2641 GET_SUM_BLOCK(sbi, segno)); in new_curseg()
2648 segno = __get_next_segno(sbi, type); in new_curseg()
2649 get_new_segment(sbi, &segno, new_sec, dir); in new_curseg()
2650 curseg->next_segno = segno; in new_curseg()
2656 int segno, block_t start) in __next_free_blkoff() argument
2658 struct seg_entry *se = get_seg_entry(sbi, segno); in __next_free_blkoff()
2681 __next_free_blkoff(sbi, seg->segno, in __refresh_next_blkoff()
2687 bool f2fs_segment_has_free_slot(struct f2fs_sb_info *sbi, int segno) in f2fs_segment_has_free_slot() argument
2689 return __next_free_blkoff(sbi, segno, 0) < sbi->blocks_per_seg; in f2fs_segment_has_free_slot()
2706 GET_SUM_BLOCK(sbi, curseg->segno)); in change_curseg()
2717 curseg->next_blkoff = __next_free_blkoff(sbi, curseg->segno, 0); in change_curseg()
2787 if (get_valid_blocks(sbi, curseg->segno, false)) { in __f2fs_save_inmem_curseg()
2789 GET_SUM_BLOCK(sbi, curseg->segno)); in __f2fs_save_inmem_curseg()
2792 __set_test_and_free(sbi, curseg->segno, true); in __f2fs_save_inmem_curseg()
2814 if (get_valid_blocks(sbi, curseg->segno, false)) in __f2fs_restore_inmem_curseg()
2818 __set_test_and_inuse(sbi, curseg->segno); in __f2fs_restore_inmem_curseg()
2837 unsigned segno = NULL_SEGNO; in get_ssr_segment() local
2845 if (!v_ops->get_victim(sbi, &segno, BG_GC, seg_type, alloc_mode, age)) { in get_ssr_segment()
2846 curseg->next_segno = segno; in get_ssr_segment()
2872 if (!v_ops->get_victim(sbi, &segno, BG_GC, i, alloc_mode, age)) { in get_ssr_segment()
2873 curseg->next_segno = segno; in get_ssr_segment()
2880 segno = get_free_segment(sbi); in get_ssr_segment()
2881 if (segno != NULL_SEGNO) { in get_ssr_segment()
2882 curseg->next_segno = segno; in get_ssr_segment()
2920 unsigned int segno; in f2fs_allocate_segment_for_resize() local
2926 segno = CURSEG_I(sbi, type)->segno; in f2fs_allocate_segment_for_resize()
2927 if (segno < start || segno > end) in f2fs_allocate_segment_for_resize()
2937 locate_dirty_segment(sbi, segno); in f2fs_allocate_segment_for_resize()
2941 if (segno != curseg->segno) in f2fs_allocate_segment_for_resize()
2943 type, segno, curseg->segno); in f2fs_allocate_segment_for_resize()
2959 get_valid_blocks(sbi, curseg->segno, new_sec)) in __allocate_new_segment()
2962 if (!get_ckpt_valid_blocks(sbi, curseg->segno, new_sec)) in __allocate_new_segment()
2965 old_segno = curseg->segno; in __allocate_new_segment()
3166 curseg->segno); in __has_curseg_space()
3590 unsigned int segno; in f2fs_inplace_write_data() local
3596 segno = GET_SEGNO(sbi, fio->new_blkaddr); in f2fs_inplace_write_data()
3598 if (!IS_DATASEG(get_seg_entry(sbi, segno)->type)) { in f2fs_inplace_write_data()
3601 __func__, segno); in f2fs_inplace_write_data()
3639 unsigned int segno) in __f2fs_get_curseg() argument
3644 if (CURSEG_I(sbi, i)->segno == segno) in __f2fs_get_curseg()
3657 unsigned int segno, old_cursegno; in f2fs_do_replace_block() local
3663 segno = GET_SEGNO(sbi, new_blkaddr); in f2fs_do_replace_block()
3664 se = get_seg_entry(sbi, segno); in f2fs_do_replace_block()
3671 if (se->valid_blocks == 0 && !IS_CURSEG(sbi, segno)) { in f2fs_do_replace_block()
3678 if (IS_CURSEG(sbi, segno)) { in f2fs_do_replace_block()
3680 type = __f2fs_get_curseg(sbi, segno); in f2fs_do_replace_block()
3693 old_cursegno = curseg->segno; in f2fs_do_replace_block()
3698 if (segno != curseg->segno) { in f2fs_do_replace_block()
3699 curseg->next_segno = segno; in f2fs_do_replace_block()
3726 if (old_cursegno != curseg->segno) { in f2fs_do_replace_block()
3834 unsigned int segno; in read_compacted_summaries() local
3837 segno = le32_to_cpu(ckpt->cur_data_segno[i]); in read_compacted_summaries()
3839 seg_i->next_segno = segno; in read_compacted_summaries()
3878 unsigned int segno = 0; in read_normal_summaries() local
3884 segno = le32_to_cpu(ckpt->cur_data_segno[type]); in read_normal_summaries()
3892 segno = le32_to_cpu(ckpt->cur_node_segno[type - in read_normal_summaries()
3900 blk_addr = GET_SUM_BLOCK(sbi, segno); in read_normal_summaries()
3918 err = f2fs_restore_node_summary(sbi, segno, sum); in read_normal_summaries()
3935 curseg->next_segno = segno; in read_normal_summaries()
4097 unsigned int segno) in get_current_sit_page() argument
4099 return f2fs_get_meta_page(sbi, current_sit_addr(sbi, segno)); in get_current_sit_page()
4152 static void add_sit_entry(unsigned int segno, struct list_head *head) in add_sit_entry() argument
4155 unsigned int start_segno = START_SEGNO(segno); in add_sit_entry()
4177 unsigned int segno; in add_sits_in_set() local
4179 for_each_set_bit(segno, bitmap, MAIN_SEGS(sbi)) in add_sits_in_set()
4180 add_sit_entry(segno, set_list); in add_sits_in_set()
4191 unsigned int segno; in remove_sits_in_journal() local
4194 segno = le32_to_cpu(segno_in_journal(journal, i)); in remove_sits_in_journal()
4195 dirtied = __mark_sit_entry_dirty(sbi, segno); in remove_sits_in_journal()
4198 add_sit_entry(segno, &SM_I(sbi)->sit_entry_set); in remove_sits_in_journal()
4250 unsigned int segno = start_segno; in f2fs_flush_sit_entries() local
4264 for_each_set_bit_from(segno, bitmap, end) { in f2fs_flush_sit_entries()
4267 se = get_seg_entry(sbi, segno); in f2fs_flush_sit_entries()
4276 cpc->trim_start = segno; in f2fs_flush_sit_entries()
4282 SIT_JOURNAL, segno, 1); in f2fs_flush_sit_entries()
4285 cpu_to_le32(segno); in f2fs_flush_sit_entries()
4288 check_block_count(sbi, segno, in f2fs_flush_sit_entries()
4291 sit_offset = SIT_ENTRY_OFFSET(sit_i, segno); in f2fs_flush_sit_entries()
4294 check_block_count(sbi, segno, in f2fs_flush_sit_entries()
4298 __clear_bit(segno, bitmap); in f2fs_flush_sit_entries()
4496 array[i].segno = NULL_SEGNO; in build_curseg()
4660 __set_test_and_inuse(sbi, curseg_t->segno); in init_free_segmap()
4668 unsigned int segno = 0, offset = 0, secno; in init_dirty_segmap() local
4674 segno = find_next_inuse(free_i, MAIN_SEGS(sbi), offset); in init_dirty_segmap()
4675 if (segno >= MAIN_SEGS(sbi)) in init_dirty_segmap()
4677 offset = segno + 1; in init_dirty_segmap()
4678 valid_blocks = get_valid_blocks(sbi, segno, false); in init_dirty_segmap()
4679 usable_blks_in_seg = f2fs_usable_blks_in_seg(sbi, segno); in init_dirty_segmap()
4687 __locate_dirty_segment(sbi, segno, DIRTY); in init_dirty_segmap()
4695 for (segno = 0; segno < MAIN_SEGS(sbi); segno += sbi->segs_per_sec) { in init_dirty_segmap()
4696 valid_blocks = get_valid_blocks(sbi, segno, true); in init_dirty_segmap()
4697 secno = GET_SEC_FROM_SEG(sbi, segno); in init_dirty_segmap()
4764 struct seg_entry *se = get_seg_entry(sbi, curseg->segno); in sanity_check_curseg()
4792 i, curseg->segno, curseg->alloc_type, in sanity_check_curseg()
4806 unsigned int wp_segno, wp_blkoff, zone_secno, zone_segno, segno; in check_zone_write_pointer() local
4831 CURSEG_I(sbi, i)->segno)) in check_zone_write_pointer()
4839 segno = zone_segno + s; in check_zone_write_pointer()
4840 se = get_seg_entry(sbi, segno); in check_zone_write_pointer()
4843 last_valid_block = START_BLOCK(sbi, segno) + b; in check_zone_write_pointer()
4920 cs_section = GET_SEC_FROM_SEG(sbi, cs->segno); in fix_curseg_write_pointer()
4946 if (cs->segno == wp_segno && cs->next_blkoff == wp_blkoff && in fix_curseg_write_pointer()
4952 type, cs->segno, cs->next_blkoff, wp_segno, wp_blkoff); in fix_curseg_write_pointer()
4955 "curseg[0x%x,0x%x]", type, cs->segno, cs->next_blkoff); in fix_curseg_write_pointer()
4964 cs_section = GET_SEC_FROM_SEG(sbi, cs->segno); in fix_curseg_write_pointer()
4988 type, cs->segno, cs->next_blkoff); in fix_curseg_write_pointer()
5073 struct f2fs_sb_info *sbi, unsigned int segno) in f2fs_usable_zone_segs_in_sec() argument
5077 dev_idx = f2fs_target_device_index(sbi, START_BLOCK(sbi, segno)); in f2fs_usable_zone_segs_in_sec()
5078 zone_idx = get_zone_idx(sbi, GET_SEC_FROM_SEG(sbi, segno), dev_idx); in f2fs_usable_zone_segs_in_sec()
5107 struct f2fs_sb_info *sbi, unsigned int segno) in f2fs_usable_zone_blks_in_seg() argument
5112 secno = GET_SEC_FROM_SEG(sbi, segno); in f2fs_usable_zone_blks_in_seg()
5113 seg_start = START_BLOCK(sbi, segno); in f2fs_usable_zone_blks_in_seg()
5156 unsigned int segno) in f2fs_usable_zone_blks_in_seg() argument
5162 unsigned int segno) in f2fs_usable_zone_segs_in_sec() argument
5168 unsigned int segno) in f2fs_usable_blks_in_seg() argument
5171 return f2fs_usable_zone_blks_in_seg(sbi, segno); in f2fs_usable_blks_in_seg()
5177 unsigned int segno) in f2fs_usable_segs_in_sec() argument
5180 return f2fs_usable_zone_segs_in_sec(sbi, segno); in f2fs_usable_segs_in_sec()
5191 unsigned int segno; in init_min_max_mtime() local
5197 for (segno = 0; segno < MAIN_SEGS(sbi); segno += sbi->segs_per_sec) { in init_min_max_mtime()
5202 mtime += get_seg_entry(sbi, segno + i)->mtime; in init_min_max_mtime()