Lines Matching refs:segno

743 static void __locate_dirty_segment(struct f2fs_sb_info *sbi, unsigned int segno,  in __locate_dirty_segment()  argument
749 if (IS_CURSEG(sbi, segno)) in __locate_dirty_segment()
752 if (!test_and_set_bit(segno, dirty_i->dirty_segmap[dirty_type])) in __locate_dirty_segment()
756 struct seg_entry *sentry = get_seg_entry(sbi, segno); in __locate_dirty_segment()
763 if (!test_and_set_bit(segno, dirty_i->dirty_segmap[t])) in __locate_dirty_segment()
767 unsigned int secno = GET_SEC_FROM_SEG(sbi, segno); in __locate_dirty_segment()
769 get_valid_blocks(sbi, segno, true); in __locate_dirty_segment()
780 static void __remove_dirty_segment(struct f2fs_sb_info *sbi, unsigned int segno, in __remove_dirty_segment() argument
786 if (test_and_clear_bit(segno, dirty_i->dirty_segmap[dirty_type])) in __remove_dirty_segment()
790 struct seg_entry *sentry = get_seg_entry(sbi, segno); in __remove_dirty_segment()
793 if (test_and_clear_bit(segno, dirty_i->dirty_segmap[t])) in __remove_dirty_segment()
796 valid_blocks = get_valid_blocks(sbi, segno, true); in __remove_dirty_segment()
798 clear_bit(GET_SEC_FROM_SEG(sbi, segno), in __remove_dirty_segment()
801 clear_bit(segno, SIT_I(sbi)->invalid_segmap); in __remove_dirty_segment()
805 unsigned int secno = GET_SEC_FROM_SEG(sbi, segno); in __remove_dirty_segment()
824 static void locate_dirty_segment(struct f2fs_sb_info *sbi, unsigned int segno) in locate_dirty_segment() argument
830 if (segno == NULL_SEGNO || IS_CURSEG(sbi, segno)) in locate_dirty_segment()
833 usable_blocks = f2fs_usable_blks_in_seg(sbi, segno); in locate_dirty_segment()
836 valid_blocks = get_valid_blocks(sbi, segno, false); in locate_dirty_segment()
837 ckpt_valid_blocks = get_ckpt_valid_blocks(sbi, segno, false); in locate_dirty_segment()
841 __locate_dirty_segment(sbi, segno, PRE); in locate_dirty_segment()
842 __remove_dirty_segment(sbi, segno, DIRTY); in locate_dirty_segment()
844 __locate_dirty_segment(sbi, segno, DIRTY); in locate_dirty_segment()
847 __remove_dirty_segment(sbi, segno, DIRTY); in locate_dirty_segment()
857 unsigned int segno; in f2fs_dirty_to_prefree() local
860 for_each_set_bit(segno, dirty_i->dirty_segmap[DIRTY], MAIN_SEGS(sbi)) { in f2fs_dirty_to_prefree()
861 if (get_valid_blocks(sbi, segno, false)) in f2fs_dirty_to_prefree()
863 if (IS_CURSEG(sbi, segno)) in f2fs_dirty_to_prefree()
865 __locate_dirty_segment(sbi, segno, PRE); in f2fs_dirty_to_prefree()
866 __remove_dirty_segment(sbi, segno, DIRTY); in f2fs_dirty_to_prefree()
880 unsigned int segno; in f2fs_get_unusable_blocks() local
883 for_each_set_bit(segno, dirty_i->dirty_segmap[DIRTY], MAIN_SEGS(sbi)) { in f2fs_get_unusable_blocks()
884 se = get_seg_entry(sbi, segno); in f2fs_get_unusable_blocks()
886 holes[NODE] += f2fs_usable_blks_in_seg(sbi, segno) - in f2fs_get_unusable_blocks()
889 holes[DATA] += f2fs_usable_blks_in_seg(sbi, segno) - in f2fs_get_unusable_blocks()
916 unsigned int segno = 0; in get_free_segment() local
919 for_each_set_bit(segno, dirty_i->dirty_segmap[DIRTY], MAIN_SEGS(sbi)) { in get_free_segment()
920 if (get_valid_blocks(sbi, segno, false)) in get_free_segment()
922 if (get_ckpt_valid_blocks(sbi, segno, false)) in get_free_segment()
925 return segno; in get_free_segment()
1133 unsigned int segno; in __check_sit_bitmap() local
1139 segno = GET_SEGNO(sbi, blk); in __check_sit_bitmap()
1140 sentry = get_seg_entry(sbi, segno); in __check_sit_bitmap()
1143 if (end < START_BLOCK(sbi, segno + 1)) in __check_sit_bitmap()
1150 blk = START_BLOCK(sbi, segno + 1); in __check_sit_bitmap()
2123 unsigned int segno; in set_prefree_as_free_segments() local
2126 for_each_set_bit(segno, dirty_i->dirty_segmap[PRE], MAIN_SEGS(sbi)) in set_prefree_as_free_segments()
2127 __set_test_and_free(sbi, segno, false); in set_prefree_as_free_segments()
2334 static bool __mark_sit_entry_dirty(struct f2fs_sb_info *sbi, unsigned int segno) in __mark_sit_entry_dirty() argument
2338 if (!__test_and_set_bit(segno, sit_i->dirty_sentries_bitmap)) { in __mark_sit_entry_dirty()
2347 unsigned int segno, int modified) in __set_sit_entry_type() argument
2349 struct seg_entry *se = get_seg_entry(sbi, segno); in __set_sit_entry_type()
2353 __mark_sit_entry_dirty(sbi, segno); in __set_sit_entry_type()
2359 unsigned int segno = GET_SEGNO(sbi, blkaddr); in get_segment_mtime() local
2361 if (segno == NULL_SEGNO) in get_segment_mtime()
2363 return get_seg_entry(sbi, segno)->mtime; in get_segment_mtime()
2370 unsigned int segno = GET_SEGNO(sbi, blkaddr); in update_segment_mtime() local
2374 if (segno == NULL_SEGNO) in update_segment_mtime()
2377 se = get_seg_entry(sbi, segno); in update_segment_mtime()
2392 unsigned int segno, offset; in update_sit_entry() local
2399 segno = GET_SEGNO(sbi, blkaddr); in update_sit_entry()
2401 se = get_seg_entry(sbi, segno); in update_sit_entry()
2406 (new_vblocks > f2fs_usable_blks_in_seg(sbi, segno)))); in update_sit_entry()
2480 __mark_sit_entry_dirty(sbi, segno); in update_sit_entry()
2486 get_sec_entry(sbi, segno)->valid_blocks += del; in update_sit_entry()
2491 unsigned int segno = GET_SEGNO(sbi, addr); in f2fs_invalidate_blocks() local
2508 locate_dirty_segment(sbi, segno); in f2fs_invalidate_blocks()
2516 unsigned int segno, offset; in f2fs_is_checkpointed_data() local
2525 segno = GET_SEGNO(sbi, blkaddr); in f2fs_is_checkpointed_data()
2526 se = get_seg_entry(sbi, segno); in f2fs_is_checkpointed_data()
2575 struct page *f2fs_get_sum_page(struct f2fs_sb_info *sbi, unsigned int segno) in f2fs_get_sum_page() argument
2579 return f2fs_get_meta_page_retry(sbi, GET_SUM_BLOCK(sbi, segno)); in f2fs_get_sum_page()
2627 unsigned int segno = curseg->segno + 1; in is_next_segment_free() local
2630 if (segno < MAIN_SEGS(sbi) && segno % sbi->segs_per_sec) in is_next_segment_free()
2631 return !test_bit(segno, free_i->free_segmap); in is_next_segment_free()
2643 unsigned int segno, secno, zoneno; in get_new_segment() local
2655 segno = find_next_zero_bit(free_i->free_segmap, in get_new_segment()
2657 if (segno < GET_SEG_FROM_SEC(sbi, hint + 1)) in get_new_segment()
2687 segno = GET_SEG_FROM_SEC(sbi, secno); in get_new_segment()
2720 f2fs_bug_on(sbi, test_bit(segno, free_i->free_segmap)); in get_new_segment()
2721 __set_inuse(sbi, segno); in get_new_segment()
2722 *newseg = segno; in get_new_segment()
2733 curseg->segno = curseg->next_segno; in reset_curseg()
2734 curseg->zone = GET_ZONE_FROM_SEG(sbi, curseg->segno); in reset_curseg()
2747 __set_sit_entry_type(sbi, seg_type, curseg->segno, modified); in reset_curseg()
2761 return curseg->segno; in __get_next_segno()
2781 return curseg->segno; in __get_next_segno()
2792 unsigned int segno = curseg->segno; in new_curseg() local
2797 GET_SUM_BLOCK(sbi, segno)); in new_curseg()
2804 segno = __get_next_segno(sbi, type); in new_curseg()
2805 get_new_segment(sbi, &segno, new_sec, dir); in new_curseg()
2806 curseg->next_segno = segno; in new_curseg()
2815 int segno, block_t start) in __next_free_blkoff() argument
2817 struct seg_entry *se = get_seg_entry(sbi, segno); in __next_free_blkoff()
2833 return __next_free_blkoff(sbi, seg->segno, seg->next_blkoff + 1); in f2fs_find_next_ssr_block()
2836 bool f2fs_segment_has_free_slot(struct f2fs_sb_info *sbi, int segno) in f2fs_segment_has_free_slot() argument
2838 return __next_free_blkoff(sbi, segno, 0) < sbi->blocks_per_seg; in f2fs_segment_has_free_slot()
2853 write_sum_page(sbi, curseg->sum_blk, GET_SUM_BLOCK(sbi, curseg->segno)); in change_curseg()
2864 curseg->next_blkoff = __next_free_blkoff(sbi, curseg->segno, 0); in change_curseg()
2934 if (get_valid_blocks(sbi, curseg->segno, false)) { in __f2fs_save_inmem_curseg()
2936 GET_SUM_BLOCK(sbi, curseg->segno)); in __f2fs_save_inmem_curseg()
2939 __set_test_and_free(sbi, curseg->segno, true); in __f2fs_save_inmem_curseg()
2961 if (get_valid_blocks(sbi, curseg->segno, false)) in __f2fs_restore_inmem_curseg()
2965 __set_test_and_inuse(sbi, curseg->segno); in __f2fs_restore_inmem_curseg()
2983 unsigned segno = NULL_SEGNO; in get_ssr_segment() local
2991 if (!f2fs_get_victim(sbi, &segno, BG_GC, seg_type, alloc_mode, age)) { in get_ssr_segment()
2992 curseg->next_segno = segno; in get_ssr_segment()
3018 if (!f2fs_get_victim(sbi, &segno, BG_GC, i, alloc_mode, age)) { in get_ssr_segment()
3019 curseg->next_segno = segno; in get_ssr_segment()
3026 segno = get_free_segment(sbi); in get_ssr_segment()
3027 if (segno != NULL_SEGNO) { in get_ssr_segment()
3028 curseg->next_segno = segno; in get_ssr_segment()
3055 unsigned int segno; in f2fs_allocate_segment_for_resize() local
3061 segno = CURSEG_I(sbi, type)->segno; in f2fs_allocate_segment_for_resize()
3062 if (segno < start || segno > end) in f2fs_allocate_segment_for_resize()
3072 locate_dirty_segment(sbi, segno); in f2fs_allocate_segment_for_resize()
3076 if (segno != curseg->segno) in f2fs_allocate_segment_for_resize()
3078 type, segno, curseg->segno); in f2fs_allocate_segment_for_resize()
3092 !get_valid_blocks(sbi, curseg->segno, new_sec) && in __allocate_new_segment()
3093 !get_ckpt_valid_blocks(sbi, curseg->segno, new_sec)) in __allocate_new_segment()
3096 old_segno = curseg->segno; in __allocate_new_segment()
3449 if (curseg->next_blkoff >= f2fs_usable_blks_in_seg(sbi, curseg->segno)) in f2fs_allocate_data_block()
3635 unsigned int segno; in f2fs_inplace_write_data() local
3641 segno = GET_SEGNO(sbi, fio->new_blkaddr); in f2fs_inplace_write_data()
3643 if (!IS_DATASEG(get_seg_entry(sbi, segno)->type)) { in f2fs_inplace_write_data()
3646 __func__, segno); in f2fs_inplace_write_data()
3687 unsigned int segno) in __f2fs_get_curseg() argument
3692 if (CURSEG_I(sbi, i)->segno == segno) in __f2fs_get_curseg()
3705 unsigned int segno, old_cursegno; in f2fs_do_replace_block() local
3711 segno = GET_SEGNO(sbi, new_blkaddr); in f2fs_do_replace_block()
3712 se = get_seg_entry(sbi, segno); in f2fs_do_replace_block()
3719 if (se->valid_blocks == 0 && !IS_CURSEG(sbi, segno)) { in f2fs_do_replace_block()
3726 if (IS_CURSEG(sbi, segno)) { in f2fs_do_replace_block()
3728 type = __f2fs_get_curseg(sbi, segno); in f2fs_do_replace_block()
3741 old_cursegno = curseg->segno; in f2fs_do_replace_block()
3746 if (segno != curseg->segno) { in f2fs_do_replace_block()
3747 curseg->next_segno = segno; in f2fs_do_replace_block()
3774 if (old_cursegno != curseg->segno) { in f2fs_do_replace_block()
3882 unsigned int segno; in read_compacted_summaries() local
3885 segno = le32_to_cpu(ckpt->cur_data_segno[i]); in read_compacted_summaries()
3887 seg_i->next_segno = segno; in read_compacted_summaries()
3926 unsigned int segno = 0; in read_normal_summaries() local
3932 segno = le32_to_cpu(ckpt->cur_data_segno[type]); in read_normal_summaries()
3940 segno = le32_to_cpu(ckpt->cur_node_segno[type - in read_normal_summaries()
3948 blk_addr = GET_SUM_BLOCK(sbi, segno); in read_normal_summaries()
3966 err = f2fs_restore_node_summary(sbi, segno, sum); in read_normal_summaries()
3983 curseg->next_segno = segno; in read_normal_summaries()
4138 unsigned int segno) in get_current_sit_page() argument
4140 return f2fs_get_meta_page(sbi, current_sit_addr(sbi, segno)); in get_current_sit_page()
4196 static void add_sit_entry(unsigned int segno, struct list_head *head) in add_sit_entry() argument
4199 unsigned int start_segno = START_SEGNO(segno); in add_sit_entry()
4221 unsigned int segno; in add_sits_in_set() local
4223 for_each_set_bit(segno, bitmap, MAIN_SEGS(sbi)) in add_sits_in_set()
4224 add_sit_entry(segno, set_list); in add_sits_in_set()
4235 unsigned int segno; in remove_sits_in_journal() local
4238 segno = le32_to_cpu(segno_in_journal(journal, i)); in remove_sits_in_journal()
4239 dirtied = __mark_sit_entry_dirty(sbi, segno); in remove_sits_in_journal()
4242 add_sit_entry(segno, &SM_I(sbi)->sit_entry_set); in remove_sits_in_journal()
4294 unsigned int segno = start_segno; in f2fs_flush_sit_entries() local
4308 for_each_set_bit_from(segno, bitmap, end) { in f2fs_flush_sit_entries()
4311 se = get_seg_entry(sbi, segno); in f2fs_flush_sit_entries()
4320 cpc->trim_start = segno; in f2fs_flush_sit_entries()
4326 SIT_JOURNAL, segno, 1); in f2fs_flush_sit_entries()
4329 cpu_to_le32(segno); in f2fs_flush_sit_entries()
4332 check_block_count(sbi, segno, in f2fs_flush_sit_entries()
4335 sit_offset = SIT_ENTRY_OFFSET(sit_i, segno); in f2fs_flush_sit_entries()
4338 check_block_count(sbi, segno, in f2fs_flush_sit_entries()
4342 __clear_bit(segno, bitmap); in f2fs_flush_sit_entries()
4540 array[i].segno = NULL_SEGNO; in build_curseg()
4714 __set_test_and_inuse(sbi, curseg_t->segno); in init_free_segmap()
4722 unsigned int segno = 0, offset = 0, secno; in init_dirty_segmap() local
4727 segno = find_next_inuse(free_i, MAIN_SEGS(sbi), offset); in init_dirty_segmap()
4728 if (segno >= MAIN_SEGS(sbi)) in init_dirty_segmap()
4730 offset = segno + 1; in init_dirty_segmap()
4731 valid_blocks = get_valid_blocks(sbi, segno, false); in init_dirty_segmap()
4732 usable_blks_in_seg = f2fs_usable_blks_in_seg(sbi, segno); in init_dirty_segmap()
4740 __locate_dirty_segment(sbi, segno, DIRTY); in init_dirty_segmap()
4748 for (segno = 0; segno < MAIN_SEGS(sbi); segno += sbi->segs_per_sec) { in init_dirty_segmap()
4749 valid_blocks = get_valid_blocks(sbi, segno, true); in init_dirty_segmap()
4750 secno = GET_SEC_FROM_SEG(sbi, segno); in init_dirty_segmap()
4824 struct seg_entry *se = get_seg_entry(sbi, curseg->segno); in sanity_check_curseg()
4853 i, curseg->segno, curseg->alloc_type, in sanity_check_curseg()
4868 unsigned int wp_segno, wp_blkoff, zone_secno, zone_segno, segno; in check_zone_write_pointer() local
4893 CURSEG_I(sbi, i)->segno)) in check_zone_write_pointer()
4901 segno = zone_segno + s; in check_zone_write_pointer()
4902 se = get_seg_entry(sbi, segno); in check_zone_write_pointer()
4905 last_valid_block = START_BLOCK(sbi, segno) + b; in check_zone_write_pointer()
5002 cs_section = GET_SEC_FROM_SEG(sbi, cs->segno); in fix_curseg_write_pointer()
5028 if (cs->segno == wp_segno && cs->next_blkoff == wp_blkoff && in fix_curseg_write_pointer()
5034 type, cs->segno, cs->next_blkoff, wp_segno, wp_blkoff); in fix_curseg_write_pointer()
5037 "curseg[0x%x,0x%x]", type, cs->segno, cs->next_blkoff); in fix_curseg_write_pointer()
5046 cs_section = GET_SEC_FROM_SEG(sbi, cs->segno); in fix_curseg_write_pointer()
5070 type, cs->segno, cs->next_blkoff); in fix_curseg_write_pointer()
5140 struct f2fs_sb_info *sbi, unsigned int segno) in f2fs_usable_zone_blks_in_seg() argument
5148 secno = GET_SEC_FROM_SEG(sbi, segno); in f2fs_usable_zone_blks_in_seg()
5149 seg_start = START_BLOCK(sbi, segno); in f2fs_usable_zone_blks_in_seg()
5178 unsigned int segno) in f2fs_usable_zone_blks_in_seg() argument
5185 unsigned int segno) in f2fs_usable_blks_in_seg() argument
5188 return f2fs_usable_zone_blks_in_seg(sbi, segno); in f2fs_usable_blks_in_seg()
5194 unsigned int segno) in f2fs_usable_segs_in_sec() argument
5208 unsigned int segno; in init_min_max_mtime() local
5214 for (segno = 0; segno < MAIN_SEGS(sbi); segno += sbi->segs_per_sec) { in init_min_max_mtime()
5219 mtime += get_seg_entry(sbi, segno + i)->mtime; in init_min_max_mtime()