Lines Matching refs:segno
770 static void __locate_dirty_segment(struct f2fs_sb_info *sbi, unsigned int segno, in __locate_dirty_segment() argument
776 if (is_curseg(sbi, segno)) in __locate_dirty_segment()
779 if (!test_and_set_bit(segno, dirty_i->dirty_segmap[dirty_type])) in __locate_dirty_segment()
783 struct seg_entry *sentry = get_seg_entry(sbi, segno); in __locate_dirty_segment()
790 if (!test_and_set_bit(segno, dirty_i->dirty_segmap[t])) in __locate_dirty_segment()
794 unsigned int secno = GET_SEC_FROM_SEG(sbi, segno); in __locate_dirty_segment()
796 get_valid_blocks(sbi, segno, true); in __locate_dirty_segment()
809 static void __remove_dirty_segment(struct f2fs_sb_info *sbi, unsigned int segno, in __remove_dirty_segment() argument
815 if (test_and_clear_bit(segno, dirty_i->dirty_segmap[dirty_type])) in __remove_dirty_segment()
819 struct seg_entry *sentry = get_seg_entry(sbi, segno); in __remove_dirty_segment()
822 if (test_and_clear_bit(segno, dirty_i->dirty_segmap[t])) in __remove_dirty_segment()
825 valid_blocks = get_valid_blocks(sbi, segno, true); in __remove_dirty_segment()
827 clear_bit(GET_SEC_FROM_SEG(sbi, segno), in __remove_dirty_segment()
830 clear_bit(segno, SIT_I(sbi)->invalid_segmap); in __remove_dirty_segment()
834 unsigned int secno = GET_SEC_FROM_SEG(sbi, segno); in __remove_dirty_segment()
853 static void locate_dirty_segment(struct f2fs_sb_info *sbi, unsigned int segno) in locate_dirty_segment() argument
859 if (segno == NULL_SEGNO || is_curseg(sbi, segno)) in locate_dirty_segment()
862 usable_blocks = f2fs_usable_blks_in_seg(sbi, segno); in locate_dirty_segment()
865 valid_blocks = get_valid_blocks(sbi, segno, false); in locate_dirty_segment()
866 ckpt_valid_blocks = get_ckpt_valid_blocks(sbi, segno, false); in locate_dirty_segment()
870 __locate_dirty_segment(sbi, segno, PRE); in locate_dirty_segment()
871 __remove_dirty_segment(sbi, segno, DIRTY); in locate_dirty_segment()
873 __locate_dirty_segment(sbi, segno, DIRTY); in locate_dirty_segment()
876 __remove_dirty_segment(sbi, segno, DIRTY); in locate_dirty_segment()
886 unsigned int segno; in f2fs_dirty_to_prefree() local
889 for_each_set_bit(segno, dirty_i->dirty_segmap[DIRTY], MAIN_SEGS(sbi)) { in f2fs_dirty_to_prefree()
890 if (get_valid_blocks(sbi, segno, false)) in f2fs_dirty_to_prefree()
892 if (is_curseg(sbi, segno)) in f2fs_dirty_to_prefree()
894 __locate_dirty_segment(sbi, segno, PRE); in f2fs_dirty_to_prefree()
895 __remove_dirty_segment(sbi, segno, DIRTY); in f2fs_dirty_to_prefree()
909 unsigned int segno; in f2fs_get_unusable_blocks() local
912 for_each_set_bit(segno, dirty_i->dirty_segmap[DIRTY], MAIN_SEGS(sbi)) { in f2fs_get_unusable_blocks()
913 se = get_seg_entry(sbi, segno); in f2fs_get_unusable_blocks()
915 holes[NODE] += f2fs_usable_blks_in_seg(sbi, segno) - in f2fs_get_unusable_blocks()
918 holes[DATA] += f2fs_usable_blks_in_seg(sbi, segno) - in f2fs_get_unusable_blocks()
950 unsigned int segno = 0; in get_free_segment() local
953 for_each_set_bit(segno, dirty_i->dirty_segmap[DIRTY], MAIN_SEGS(sbi)) { in get_free_segment()
954 if (get_valid_blocks(sbi, segno, false)) in get_free_segment()
956 if (get_ckpt_valid_blocks(sbi, segno, false)) in get_free_segment()
959 return segno; in get_free_segment()
1166 unsigned int segno; in __check_sit_bitmap() local
1171 segno = GET_SEGNO(sbi, blk); in __check_sit_bitmap()
1172 sentry = get_seg_entry(sbi, segno); in __check_sit_bitmap()
1175 if (end < START_BLOCK(sbi, segno + 1)) in __check_sit_bitmap()
1182 blk = START_BLOCK(sbi, segno + 1); in __check_sit_bitmap()
2174 unsigned int segno; in set_prefree_as_free_segments() local
2177 for_each_set_bit(segno, dirty_i->dirty_segmap[PRE], MAIN_SEGS(sbi)) in set_prefree_as_free_segments()
2178 __set_test_and_free(sbi, segno, false); in set_prefree_as_free_segments()
2391 static bool __mark_sit_entry_dirty(struct f2fs_sb_info *sbi, unsigned int segno) in __mark_sit_entry_dirty() argument
2395 if (!__test_and_set_bit(segno, sit_i->dirty_sentries_bitmap)) { in __mark_sit_entry_dirty()
2404 unsigned int segno, int modified) in __set_sit_entry_type() argument
2406 struct seg_entry *se = get_seg_entry(sbi, segno); in __set_sit_entry_type()
2410 __mark_sit_entry_dirty(sbi, segno); in __set_sit_entry_type()
2416 unsigned int segno = GET_SEGNO(sbi, blkaddr); in get_segment_mtime() local
2418 if (segno == NULL_SEGNO) in get_segment_mtime()
2420 return get_seg_entry(sbi, segno)->mtime; in get_segment_mtime()
2427 unsigned int segno = GET_SEGNO(sbi, blkaddr); in update_segment_mtime() local
2431 if (segno == NULL_SEGNO) in update_segment_mtime()
2434 se = get_seg_entry(sbi, segno); in update_segment_mtime()
2451 unsigned int segno, block_t blkaddr, unsigned int offset, int del) in update_sit_entry_for_release() argument
2499 get_sec_entry(sbi, segno)->ckpt_valid_blocks -= 1; in update_sit_entry_for_release()
2504 sanity_check_valid_blocks(sbi, segno); in update_sit_entry_for_release()
2510 unsigned int segno, block_t blkaddr, unsigned int offset, int del) in update_sit_entry_for_alloc() argument
2546 get_sec_entry(sbi, segno)->ckpt_valid_blocks++; in update_sit_entry_for_alloc()
2553 get_sec_entry(sbi, segno)->ckpt_valid_blocks += del; in update_sit_entry_for_alloc()
2557 sanity_check_valid_blocks(sbi, segno); in update_sit_entry_for_alloc()
2570 unsigned int segno, offset; in update_sit_entry() local
2573 segno = GET_SEGNO(sbi, blkaddr); in update_sit_entry()
2574 if (segno == NULL_SEGNO) in update_sit_entry()
2577 se = get_seg_entry(sbi, segno); in update_sit_entry()
2582 (new_vblocks > f2fs_usable_blks_in_seg(sbi, segno)))); in update_sit_entry()
2588 del = update_sit_entry_for_alloc(sbi, se, segno, blkaddr, offset, del); in update_sit_entry()
2590 del = update_sit_entry_for_release(sbi, se, segno, blkaddr, offset, del); in update_sit_entry()
2593 __mark_sit_entry_dirty(sbi, segno); in update_sit_entry()
2599 get_sec_entry(sbi, segno)->valid_blocks += del; in update_sit_entry()
2605 unsigned int segno = GET_SEGNO(sbi, addr); in f2fs_invalidate_blocks() local
2608 unsigned int seg_num = GET_SEGNO(sbi, addr_end) - segno + 1; in f2fs_invalidate_blocks()
2630 locate_dirty_segment(sbi, segno); in f2fs_invalidate_blocks()
2633 addr_start = START_BLOCK(sbi, ++segno); in f2fs_invalidate_blocks()
2646 unsigned int segno, offset; in f2fs_is_checkpointed_data() local
2655 segno = GET_SEGNO(sbi, blkaddr); in f2fs_is_checkpointed_data()
2656 se = get_seg_entry(sbi, segno); in f2fs_is_checkpointed_data()
2705 struct folio *f2fs_get_sum_folio(struct f2fs_sb_info *sbi, unsigned int segno) in f2fs_get_sum_folio() argument
2709 return f2fs_get_meta_folio_retry(sbi, GET_SUM_BLOCK(sbi, segno)); in f2fs_get_sum_folio()
2757 unsigned int segno = curseg->segno + 1; in is_next_segment_free() local
2760 if (segno < MAIN_SEGS(sbi) && segno % SEGS_PER_SEC(sbi)) in is_next_segment_free()
2761 return !test_bit(segno, free_i->free_segmap); in is_next_segment_free()
2773 unsigned int segno, secno, zoneno; in get_new_segment() local
2789 segno = find_next_zero_bit(free_i->free_segmap, in get_new_segment()
2791 if (segno < GET_SEG_FROM_SEC(sbi, hint + 1)) in get_new_segment()
2803 segno = 0; in get_new_segment()
2805 segno = max(sbi->first_seq_zone_segno, *newseg); in get_new_segment()
2806 hint = GET_SEC_FROM_SEG(sbi, segno); in get_new_segment()
2839 segno = GET_SEG_FROM_SEC(sbi, secno); in get_new_segment()
2864 if (test_bit(segno, free_i->free_segmap)) { in get_new_segment()
2872 f2fs_is_sequential_zone_area(sbi, START_BLOCK(sbi, segno))) { in get_new_segment()
2876 __set_inuse(sbi, segno); in get_new_segment()
2877 *newseg = segno; in get_new_segment()
2897 curseg->segno = curseg->next_segno; in reset_curseg()
2898 curseg->zone = GET_ZONE_FROM_SEG(sbi, curseg->segno); in reset_curseg()
2911 __set_sit_entry_type(sbi, seg_type, curseg->segno, modified); in reset_curseg()
2922 unsigned int hint = GET_SEC_FROM_SEG(sbi, curseg->segno); in __get_next_segno()
2924 if (GET_SEC_FROM_SEG(sbi, curseg->segno + 1) != hint) in __get_next_segno()
2925 return curseg->segno; in __get_next_segno()
2926 return get_random_u32_inclusive(curseg->segno + 1, in __get_next_segno()
2929 return curseg->segno; in __get_next_segno()
2951 return curseg->segno; in __get_next_segno()
2957 curseg->segno = NULL_SEGNO; in reset_curseg_fields()
2968 unsigned int segno = curseg->segno; in new_curseg() local
2973 write_sum_page(sbi, curseg->sum_blk, GET_SUM_BLOCK(sbi, segno)); in new_curseg()
2975 segno = __get_next_segno(sbi, type); in new_curseg()
2976 ret = get_new_segment(sbi, &segno, new_sec, pinning); in new_curseg()
2983 curseg->next_segno = segno; in new_curseg()
2993 int segno, block_t start) in __next_free_blkoff() argument
2995 struct seg_entry *se = get_seg_entry(sbi, segno); in __next_free_blkoff()
3011 return __next_free_blkoff(sbi, seg->segno, seg->next_blkoff + 1); in f2fs_find_next_ssr_block()
3014 bool f2fs_segment_has_free_slot(struct f2fs_sb_info *sbi, int segno) in f2fs_segment_has_free_slot() argument
3016 return __next_free_blkoff(sbi, segno, 0) < BLKS_PER_SEG(sbi); in f2fs_segment_has_free_slot()
3032 write_sum_page(sbi, curseg->sum_blk, GET_SUM_BLOCK(sbi, curseg->segno)); in change_curseg()
3043 curseg->next_blkoff = __next_free_blkoff(sbi, curseg->segno, 0); in change_curseg()
3139 if (get_valid_blocks(sbi, curseg->segno, false)) { in __f2fs_save_inmem_curseg()
3141 GET_SUM_BLOCK(sbi, curseg->segno)); in __f2fs_save_inmem_curseg()
3144 __set_test_and_free(sbi, curseg->segno, true); in __f2fs_save_inmem_curseg()
3166 if (get_valid_blocks(sbi, curseg->segno, false)) in __f2fs_restore_inmem_curseg()
3170 __set_test_and_inuse(sbi, curseg->segno); in __f2fs_restore_inmem_curseg()
3188 unsigned segno = NULL_SEGNO; in get_ssr_segment() local
3196 if (!f2fs_get_victim(sbi, &segno, BG_GC, seg_type, in get_ssr_segment()
3198 curseg->next_segno = segno; in get_ssr_segment()
3224 if (!f2fs_get_victim(sbi, &segno, BG_GC, i, in get_ssr_segment()
3226 curseg->next_segno = segno; in get_ssr_segment()
3233 segno = get_free_segment(sbi); in get_ssr_segment()
3234 if (segno != NULL_SEGNO) { in get_ssr_segment()
3235 curseg->next_segno = segno; in get_ssr_segment()
3261 unsigned int segno; in f2fs_allocate_segment_for_resize() local
3268 segno = CURSEG_I(sbi, type)->segno; in f2fs_allocate_segment_for_resize()
3269 if (segno < start || segno > end) in f2fs_allocate_segment_for_resize()
3279 locate_dirty_segment(sbi, segno); in f2fs_allocate_segment_for_resize()
3283 if (segno != curseg->segno) in f2fs_allocate_segment_for_resize()
3285 type, segno, curseg->segno); in f2fs_allocate_segment_for_resize()
3304 !get_valid_blocks(sbi, curseg->segno, new_sec) && in __allocate_new_segment()
3305 !get_ckpt_valid_blocks(sbi, curseg->segno, new_sec)) in __allocate_new_segment()
3309 old_segno = curseg->segno; in __allocate_new_segment()
3767 if (curseg->segno == NULL_SEGNO) { in f2fs_allocate_data_block()
3792 if (curseg->next_blkoff >= f2fs_usable_blks_in_seg(sbi, curseg->segno)) in f2fs_allocate_data_block()
3817 !((curseg->segno + 1) % sbi->segs_per_sec)) { in f2fs_allocate_data_block()
3819 GET_SUM_BLOCK(sbi, curseg->segno)); in f2fs_allocate_data_block()
4026 unsigned int segno; in f2fs_inplace_write_data() local
4032 segno = GET_SEGNO(sbi, fio->new_blkaddr); in f2fs_inplace_write_data()
4034 if (!IS_DATASEG(get_seg_entry(sbi, segno)->type)) { in f2fs_inplace_write_data()
4037 __func__, segno); in f2fs_inplace_write_data()
4077 unsigned int segno) in __f2fs_get_curseg() argument
4082 if (CURSEG_I(sbi, i)->segno == segno) in __f2fs_get_curseg()
4095 unsigned int segno, old_cursegno; in f2fs_do_replace_block() local
4101 segno = GET_SEGNO(sbi, new_blkaddr); in f2fs_do_replace_block()
4102 se = get_seg_entry(sbi, segno); in f2fs_do_replace_block()
4109 if (se->valid_blocks == 0 && !is_curseg(sbi, segno)) { in f2fs_do_replace_block()
4116 if (is_curseg(sbi, segno)) { in f2fs_do_replace_block()
4118 type = __f2fs_get_curseg(sbi, segno); in f2fs_do_replace_block()
4131 old_cursegno = curseg->segno; in f2fs_do_replace_block()
4136 if (segno != curseg->segno) { in f2fs_do_replace_block()
4137 curseg->next_segno = segno; in f2fs_do_replace_block()
4163 if (old_cursegno != curseg->segno) { in f2fs_do_replace_block()
4273 unsigned int segno; in read_compacted_summaries() local
4276 segno = le32_to_cpu(ckpt->cur_data_segno[i]); in read_compacted_summaries()
4278 seg_i->next_segno = segno; in read_compacted_summaries()
4316 unsigned int segno = 0; in read_normal_summaries() local
4322 segno = le32_to_cpu(ckpt->cur_data_segno[type]); in read_normal_summaries()
4330 segno = le32_to_cpu(ckpt->cur_node_segno[type - in read_normal_summaries()
4338 blk_addr = GET_SUM_BLOCK(sbi, segno); in read_normal_summaries()
4356 err = f2fs_restore_node_summary(sbi, segno, sum); in read_normal_summaries()
4373 curseg->next_segno = segno; in read_normal_summaries()
4528 unsigned int segno) in get_current_sit_folio() argument
4530 return f2fs_get_meta_folio(sbi, current_sit_addr(sbi, segno)); in get_current_sit_folio()
4586 static void add_sit_entry(unsigned int segno, struct list_head *head) in add_sit_entry() argument
4589 unsigned int start_segno = START_SEGNO(segno); in add_sit_entry()
4611 unsigned int segno; in add_sits_in_set() local
4613 for_each_set_bit(segno, bitmap, MAIN_SEGS(sbi)) in add_sits_in_set()
4614 add_sit_entry(segno, set_list); in add_sits_in_set()
4625 unsigned int segno; in remove_sits_in_journal() local
4628 segno = le32_to_cpu(segno_in_journal(journal, i)); in remove_sits_in_journal()
4629 dirtied = __mark_sit_entry_dirty(sbi, segno); in remove_sits_in_journal()
4632 add_sit_entry(segno, &SM_I(sbi)->sit_entry_set); in remove_sits_in_journal()
4684 unsigned int segno = start_segno; in f2fs_flush_sit_entries() local
4698 for_each_set_bit_from(segno, bitmap, end) { in f2fs_flush_sit_entries()
4701 se = get_seg_entry(sbi, segno); in f2fs_flush_sit_entries()
4710 cpc->trim_start = segno; in f2fs_flush_sit_entries()
4716 SIT_JOURNAL, segno, 1); in f2fs_flush_sit_entries()
4719 cpu_to_le32(segno); in f2fs_flush_sit_entries()
4722 check_block_count(sbi, segno, in f2fs_flush_sit_entries()
4725 sit_offset = SIT_ENTRY_OFFSET(sit_i, segno); in f2fs_flush_sit_entries()
4728 check_block_count(sbi, segno, in f2fs_flush_sit_entries()
4734 set_ckpt_valid_blocks(sbi, segno); in f2fs_flush_sit_entries()
4735 sanity_check_valid_blocks(sbi, segno); in f2fs_flush_sit_entries()
4738 __clear_bit(segno, bitmap); in f2fs_flush_sit_entries()
5061 unsigned int segno; in build_sit_entries() local
5063 for (segno = 0; segno < MAIN_SEGS(sbi); segno += SEGS_PER_SEC(sbi)) { in build_sit_entries()
5064 set_ckpt_valid_blocks(sbi, segno); in build_sit_entries()
5065 sanity_check_valid_blocks(sbi, segno); in build_sit_entries()
5112 __set_test_and_inuse(sbi, curseg_t->segno); in init_free_segmap()
5120 unsigned int segno = 0, offset = 0, secno; in init_dirty_segmap() local
5125 segno = find_next_inuse(free_i, MAIN_SEGS(sbi), offset); in init_dirty_segmap()
5126 if (segno >= MAIN_SEGS(sbi)) in init_dirty_segmap()
5128 offset = segno + 1; in init_dirty_segmap()
5129 valid_blocks = get_valid_blocks(sbi, segno, false); in init_dirty_segmap()
5130 usable_blks_in_seg = f2fs_usable_blks_in_seg(sbi, segno); in init_dirty_segmap()
5138 __locate_dirty_segment(sbi, segno, DIRTY); in init_dirty_segmap()
5146 for (segno = 0; segno < MAIN_SEGS(sbi); segno += SEGS_PER_SEC(sbi)) { in init_dirty_segmap()
5147 valid_blocks = get_valid_blocks(sbi, segno, true); in init_dirty_segmap()
5148 secno = GET_SEC_FROM_SEG(sbi, segno); in init_dirty_segmap()
5222 struct seg_entry *se = get_seg_entry(sbi, curseg->segno); in sanity_check_curseg()
5251 i, curseg->segno, curseg->alloc_type, in sanity_check_curseg()
5375 cs_section = GET_SEC_FROM_SEG(sbi, cs->segno); in do_fix_curseg_write_pointer()
5406 if (cs->segno == wp_segno && cs->next_blkoff == wp_blkoff && in do_fix_curseg_write_pointer()
5411 "curseg[0x%x,0x%x] wp[0x%x,0x%x]", type, cs->segno, in do_fix_curseg_write_pointer()
5417 cs->segno != GET_SEG_FROM_SEC(sbi, GET_ZONE_FROM_SEC(sbi, cs_section))) { in do_fix_curseg_write_pointer()
5418 unsigned int old_segno = cs->segno, old_blkoff = cs->next_blkoff; in do_fix_curseg_write_pointer()
5424 cs->segno, cs->next_blkoff); in do_fix_curseg_write_pointer()
5432 cs_section = GET_SEC_FROM_SEG(sbi, cs->segno); in do_fix_curseg_write_pointer()
5456 type, cs->segno, cs->next_blkoff); in do_fix_curseg_write_pointer()
5541 struct f2fs_sb_info *sbi, unsigned int segno) in f2fs_usable_zone_blks_in_seg() argument
5549 secno = GET_SEC_FROM_SEG(sbi, segno); in f2fs_usable_zone_blks_in_seg()
5550 seg_start = START_BLOCK(sbi, segno); in f2fs_usable_zone_blks_in_seg()
5574 unsigned int segno) in f2fs_usable_zone_blks_in_seg() argument
5581 unsigned int segno) in f2fs_usable_blks_in_seg() argument
5584 return f2fs_usable_zone_blks_in_seg(sbi, segno); in f2fs_usable_blks_in_seg()
5598 unsigned int segno) in f2fs_get_section_mtime() argument
5606 secno = GET_SEC_FROM_SEG(sbi, segno); in f2fs_get_section_mtime()
5638 unsigned int segno; in init_min_max_mtime() local
5644 for (segno = 0; segno < MAIN_SEGS(sbi); segno += SEGS_PER_SEC(sbi)) { in init_min_max_mtime()
5647 mtime = f2fs_get_section_mtime(sbi, segno); in init_min_max_mtime()