Lines Matching refs:segno
780 static void __locate_dirty_segment(struct f2fs_sb_info *sbi, unsigned int segno, in __locate_dirty_segment() argument
786 if (IS_CURSEG(sbi, segno)) in __locate_dirty_segment()
789 if (!test_and_set_bit(segno, dirty_i->dirty_segmap[dirty_type])) in __locate_dirty_segment()
793 struct seg_entry *sentry = get_seg_entry(sbi, segno); in __locate_dirty_segment()
800 if (!test_and_set_bit(segno, dirty_i->dirty_segmap[t])) in __locate_dirty_segment()
804 unsigned int secno = GET_SEC_FROM_SEG(sbi, segno); in __locate_dirty_segment()
806 get_valid_blocks(sbi, segno, true); in __locate_dirty_segment()
817 static void __remove_dirty_segment(struct f2fs_sb_info *sbi, unsigned int segno, in __remove_dirty_segment() argument
823 if (test_and_clear_bit(segno, dirty_i->dirty_segmap[dirty_type])) in __remove_dirty_segment()
827 struct seg_entry *sentry = get_seg_entry(sbi, segno); in __remove_dirty_segment()
830 if (test_and_clear_bit(segno, dirty_i->dirty_segmap[t])) in __remove_dirty_segment()
833 valid_blocks = get_valid_blocks(sbi, segno, true); in __remove_dirty_segment()
835 clear_bit(GET_SEC_FROM_SEG(sbi, segno), in __remove_dirty_segment()
838 clear_bit(segno, SIT_I(sbi)->invalid_segmap); in __remove_dirty_segment()
842 unsigned int secno = GET_SEC_FROM_SEG(sbi, segno); in __remove_dirty_segment()
861 static void locate_dirty_segment(struct f2fs_sb_info *sbi, unsigned int segno) in locate_dirty_segment() argument
867 if (segno == NULL_SEGNO || IS_CURSEG(sbi, segno)) in locate_dirty_segment()
870 usable_blocks = f2fs_usable_blks_in_seg(sbi, segno); in locate_dirty_segment()
873 valid_blocks = get_valid_blocks(sbi, segno, false); in locate_dirty_segment()
874 ckpt_valid_blocks = get_ckpt_valid_blocks(sbi, segno); in locate_dirty_segment()
878 __locate_dirty_segment(sbi, segno, PRE); in locate_dirty_segment()
879 __remove_dirty_segment(sbi, segno, DIRTY); in locate_dirty_segment()
881 __locate_dirty_segment(sbi, segno, DIRTY); in locate_dirty_segment()
884 __remove_dirty_segment(sbi, segno, DIRTY); in locate_dirty_segment()
894 unsigned int segno; in f2fs_dirty_to_prefree() local
897 for_each_set_bit(segno, dirty_i->dirty_segmap[DIRTY], MAIN_SEGS(sbi)) { in f2fs_dirty_to_prefree()
898 if (get_valid_blocks(sbi, segno, false)) in f2fs_dirty_to_prefree()
900 if (IS_CURSEG(sbi, segno)) in f2fs_dirty_to_prefree()
902 __locate_dirty_segment(sbi, segno, PRE); in f2fs_dirty_to_prefree()
903 __remove_dirty_segment(sbi, segno, DIRTY); in f2fs_dirty_to_prefree()
917 unsigned int segno; in f2fs_get_unusable_blocks() local
920 for_each_set_bit(segno, dirty_i->dirty_segmap[DIRTY], MAIN_SEGS(sbi)) { in f2fs_get_unusable_blocks()
921 se = get_seg_entry(sbi, segno); in f2fs_get_unusable_blocks()
923 holes[NODE] += f2fs_usable_blks_in_seg(sbi, segno) - in f2fs_get_unusable_blocks()
926 holes[DATA] += f2fs_usable_blks_in_seg(sbi, segno) - in f2fs_get_unusable_blocks()
953 unsigned int segno = 0; in get_free_segment() local
956 for_each_set_bit(segno, dirty_i->dirty_segmap[DIRTY], MAIN_SEGS(sbi)) { in get_free_segment()
957 if (get_valid_blocks(sbi, segno, false)) in get_free_segment()
959 if (get_ckpt_valid_blocks(sbi, segno)) in get_free_segment()
962 return segno; in get_free_segment()
1082 unsigned int segno; in __check_sit_bitmap() local
1088 segno = GET_SEGNO(sbi, blk); in __check_sit_bitmap()
1089 sentry = get_seg_entry(sbi, segno); in __check_sit_bitmap()
1092 if (end < START_BLOCK(sbi, segno + 1)) in __check_sit_bitmap()
1099 blk = START_BLOCK(sbi, segno + 1); in __check_sit_bitmap()
1964 unsigned int segno; in set_prefree_as_free_segments() local
1967 for_each_set_bit(segno, dirty_i->dirty_segmap[PRE], MAIN_SEGS(sbi)) in set_prefree_as_free_segments()
1968 __set_test_and_free(sbi, segno, false); in set_prefree_as_free_segments()
2139 static bool __mark_sit_entry_dirty(struct f2fs_sb_info *sbi, unsigned int segno) in __mark_sit_entry_dirty() argument
2143 if (!__test_and_set_bit(segno, sit_i->dirty_sentries_bitmap)) { in __mark_sit_entry_dirty()
2152 unsigned int segno, int modified) in __set_sit_entry_type() argument
2154 struct seg_entry *se = get_seg_entry(sbi, segno); in __set_sit_entry_type()
2157 __mark_sit_entry_dirty(sbi, segno); in __set_sit_entry_type()
2163 unsigned int segno = GET_SEGNO(sbi, blkaddr); in get_segment_mtime() local
2165 if (segno == NULL_SEGNO) in get_segment_mtime()
2167 return get_seg_entry(sbi, segno)->mtime; in get_segment_mtime()
2174 unsigned int segno = GET_SEGNO(sbi, blkaddr); in update_segment_mtime() local
2178 if (segno == NULL_SEGNO) in update_segment_mtime()
2181 se = get_seg_entry(sbi, segno); in update_segment_mtime()
2196 unsigned int segno, offset; in update_sit_entry() local
2203 segno = GET_SEGNO(sbi, blkaddr); in update_sit_entry()
2205 se = get_seg_entry(sbi, segno); in update_sit_entry()
2210 (new_vblocks > f2fs_usable_blks_in_seg(sbi, segno)))); in update_sit_entry()
2282 __mark_sit_entry_dirty(sbi, segno); in update_sit_entry()
2288 get_sec_entry(sbi, segno)->valid_blocks += del; in update_sit_entry()
2293 unsigned int segno = GET_SEGNO(sbi, addr); in f2fs_invalidate_blocks() local
2309 locate_dirty_segment(sbi, segno); in f2fs_invalidate_blocks()
2317 unsigned int segno, offset; in f2fs_is_checkpointed_data() local
2326 segno = GET_SEGNO(sbi, blkaddr); in f2fs_is_checkpointed_data()
2327 se = get_seg_entry(sbi, segno); in f2fs_is_checkpointed_data()
2383 struct page *f2fs_get_sum_page(struct f2fs_sb_info *sbi, unsigned int segno) in f2fs_get_sum_page() argument
2387 return f2fs_get_meta_page_retry(sbi, GET_SUM_BLOCK(sbi, segno)); in f2fs_get_sum_page()
2435 unsigned int segno = curseg->segno + 1; in is_next_segment_free() local
2438 if (segno < MAIN_SEGS(sbi) && segno % sbi->segs_per_sec) in is_next_segment_free()
2439 return !test_bit(segno, free_i->free_segmap); in is_next_segment_free()
2451 unsigned int segno, secno, zoneno; in get_new_segment() local
2463 segno = find_next_zero_bit(free_i->free_segmap, in get_new_segment()
2465 if (segno < GET_SEG_FROM_SEC(sbi, hint + 1)) in get_new_segment()
2495 segno = GET_SEG_FROM_SEC(sbi, secno); in get_new_segment()
2528 f2fs_bug_on(sbi, test_bit(segno, free_i->free_segmap)); in get_new_segment()
2529 __set_inuse(sbi, segno); in get_new_segment()
2530 *newseg = segno; in get_new_segment()
2541 curseg->segno = curseg->next_segno; in reset_curseg()
2542 curseg->zone = GET_ZONE_FROM_SEG(sbi, curseg->segno); in reset_curseg()
2555 __set_sit_entry_type(sbi, seg_type, curseg->segno, modified); in reset_curseg()
2567 return curseg->segno; in __get_next_segno()
2587 return curseg->segno; in __get_next_segno()
2598 unsigned int segno = curseg->segno; in new_curseg() local
2603 GET_SUM_BLOCK(sbi, segno)); in new_curseg()
2610 segno = __get_next_segno(sbi, type); in new_curseg()
2611 get_new_segment(sbi, &segno, new_sec, dir); in new_curseg()
2612 curseg->next_segno = segno; in new_curseg()
2620 struct seg_entry *se = get_seg_entry(sbi, seg->segno); in __next_free_blkoff()
2663 GET_SUM_BLOCK(sbi, curseg->segno)); in change_curseg()
2744 if (get_valid_blocks(sbi, curseg->segno, false)) { in __f2fs_save_inmem_curseg()
2746 GET_SUM_BLOCK(sbi, curseg->segno)); in __f2fs_save_inmem_curseg()
2749 __set_test_and_free(sbi, curseg->segno, true); in __f2fs_save_inmem_curseg()
2771 if (get_valid_blocks(sbi, curseg->segno, false)) in __f2fs_restore_inmem_curseg()
2775 __set_test_and_inuse(sbi, curseg->segno); in __f2fs_restore_inmem_curseg()
2794 unsigned segno = NULL_SEGNO; in get_ssr_segment() local
2802 if (!v_ops->get_victim(sbi, &segno, BG_GC, seg_type, alloc_mode, age)) { in get_ssr_segment()
2803 curseg->next_segno = segno; in get_ssr_segment()
2829 if (!v_ops->get_victim(sbi, &segno, BG_GC, i, alloc_mode, age)) { in get_ssr_segment()
2830 curseg->next_segno = segno; in get_ssr_segment()
2837 segno = get_free_segment(sbi); in get_ssr_segment()
2838 if (segno != NULL_SEGNO) { in get_ssr_segment()
2839 curseg->next_segno = segno; in get_ssr_segment()
2877 unsigned int segno; in f2fs_allocate_segment_for_resize() local
2883 segno = CURSEG_I(sbi, type)->segno; in f2fs_allocate_segment_for_resize()
2884 if (segno < start || segno > end) in f2fs_allocate_segment_for_resize()
2894 locate_dirty_segment(sbi, segno); in f2fs_allocate_segment_for_resize()
2898 if (segno != curseg->segno) in f2fs_allocate_segment_for_resize()
2900 type, segno, curseg->segno); in f2fs_allocate_segment_for_resize()
2915 !get_valid_blocks(sbi, curseg->segno, false) && in __allocate_new_segment()
2916 !get_ckpt_valid_blocks(sbi, curseg->segno)) in __allocate_new_segment()
2920 old_segno = curseg->segno; in __allocate_new_segment()
3111 curseg->segno); in __has_curseg_space()
3500 unsigned int segno; in f2fs_inplace_write_data() local
3506 segno = GET_SEGNO(sbi, fio->new_blkaddr); in f2fs_inplace_write_data()
3508 if (!IS_DATASEG(get_seg_entry(sbi, segno)->type)) { in f2fs_inplace_write_data()
3511 __func__, segno); in f2fs_inplace_write_data()
3530 unsigned int segno) in __f2fs_get_curseg() argument
3535 if (CURSEG_I(sbi, i)->segno == segno) in __f2fs_get_curseg()
3548 unsigned int segno, old_cursegno; in f2fs_do_replace_block() local
3553 segno = GET_SEGNO(sbi, new_blkaddr); in f2fs_do_replace_block()
3554 se = get_seg_entry(sbi, segno); in f2fs_do_replace_block()
3561 if (se->valid_blocks == 0 && !IS_CURSEG(sbi, segno)) { in f2fs_do_replace_block()
3568 if (IS_CURSEG(sbi, segno)) { in f2fs_do_replace_block()
3570 type = __f2fs_get_curseg(sbi, segno); in f2fs_do_replace_block()
3583 old_cursegno = curseg->segno; in f2fs_do_replace_block()
3587 if (segno != curseg->segno) { in f2fs_do_replace_block()
3588 curseg->next_segno = segno; in f2fs_do_replace_block()
3614 if (old_cursegno != curseg->segno) { in f2fs_do_replace_block()
3715 unsigned int segno; in read_compacted_summaries() local
3718 segno = le32_to_cpu(ckpt->cur_data_segno[i]); in read_compacted_summaries()
3720 seg_i->next_segno = segno; in read_compacted_summaries()
3758 unsigned int segno = 0; in read_normal_summaries() local
3764 segno = le32_to_cpu(ckpt->cur_data_segno[type]); in read_normal_summaries()
3772 segno = le32_to_cpu(ckpt->cur_node_segno[type - in read_normal_summaries()
3780 blk_addr = GET_SUM_BLOCK(sbi, segno); in read_normal_summaries()
3797 err = f2fs_restore_node_summary(sbi, segno, sum); in read_normal_summaries()
3814 curseg->next_segno = segno; in read_normal_summaries()
3974 unsigned int segno) in get_current_sit_page() argument
3976 return f2fs_get_meta_page(sbi, current_sit_addr(sbi, segno)); in get_current_sit_page()
4029 static void add_sit_entry(unsigned int segno, struct list_head *head) in add_sit_entry() argument
4032 unsigned int start_segno = START_SEGNO(segno); in add_sit_entry()
4054 unsigned int segno; in add_sits_in_set() local
4056 for_each_set_bit(segno, bitmap, MAIN_SEGS(sbi)) in add_sits_in_set()
4057 add_sit_entry(segno, set_list); in add_sits_in_set()
4068 unsigned int segno; in remove_sits_in_journal() local
4071 segno = le32_to_cpu(segno_in_journal(journal, i)); in remove_sits_in_journal()
4072 dirtied = __mark_sit_entry_dirty(sbi, segno); in remove_sits_in_journal()
4075 add_sit_entry(segno, &SM_I(sbi)->sit_entry_set); in remove_sits_in_journal()
4127 unsigned int segno = start_segno; in f2fs_flush_sit_entries() local
4141 for_each_set_bit_from(segno, bitmap, end) { in f2fs_flush_sit_entries()
4144 se = get_seg_entry(sbi, segno); in f2fs_flush_sit_entries()
4153 cpc->trim_start = segno; in f2fs_flush_sit_entries()
4159 SIT_JOURNAL, segno, 1); in f2fs_flush_sit_entries()
4162 cpu_to_le32(segno); in f2fs_flush_sit_entries()
4165 check_block_count(sbi, segno, in f2fs_flush_sit_entries()
4168 sit_offset = SIT_ENTRY_OFFSET(sit_i, segno); in f2fs_flush_sit_entries()
4171 check_block_count(sbi, segno, in f2fs_flush_sit_entries()
4175 __clear_bit(segno, bitmap); in f2fs_flush_sit_entries()
4373 array[i].segno = NULL_SEGNO; in build_curseg()
4512 __set_test_and_inuse(sbi, curseg_t->segno); in init_free_segmap()
4520 unsigned int segno = 0, offset = 0, secno; in init_dirty_segmap() local
4526 segno = find_next_inuse(free_i, MAIN_SEGS(sbi), offset); in init_dirty_segmap()
4527 if (segno >= MAIN_SEGS(sbi)) in init_dirty_segmap()
4529 offset = segno + 1; in init_dirty_segmap()
4530 valid_blocks = get_valid_blocks(sbi, segno, false); in init_dirty_segmap()
4531 usable_blks_in_seg = f2fs_usable_blks_in_seg(sbi, segno); in init_dirty_segmap()
4539 __locate_dirty_segment(sbi, segno, DIRTY); in init_dirty_segmap()
4547 for (segno = 0; segno < MAIN_SECS(sbi); segno += blks_per_sec) { in init_dirty_segmap()
4548 valid_blocks = get_valid_blocks(sbi, segno, true); in init_dirty_segmap()
4549 secno = GET_SEC_FROM_SEG(sbi, segno); in init_dirty_segmap()
4616 struct seg_entry *se = get_seg_entry(sbi, curseg->segno); in sanity_check_curseg()
4633 i, curseg->segno, curseg->alloc_type, in sanity_check_curseg()
4647 unsigned int wp_segno, wp_blkoff, zone_secno, zone_segno, segno; in check_zone_write_pointer() local
4672 CURSEG_I(sbi, i)->segno)) in check_zone_write_pointer()
4680 segno = zone_segno + s; in check_zone_write_pointer()
4681 se = get_seg_entry(sbi, segno); in check_zone_write_pointer()
4684 last_valid_block = START_BLOCK(sbi, segno) + b; in check_zone_write_pointer()
4760 cs_section = GET_SEC_FROM_SEG(sbi, cs->segno); in fix_curseg_write_pointer()
4786 if (cs->segno == wp_segno && cs->next_blkoff == wp_blkoff && in fix_curseg_write_pointer()
4792 type, cs->segno, cs->next_blkoff, wp_segno, wp_blkoff); in fix_curseg_write_pointer()
4795 "curseg[0x%x,0x%x]", type, cs->segno, cs->next_blkoff); in fix_curseg_write_pointer()
4803 cs_section = GET_SEC_FROM_SEG(sbi, cs->segno); in fix_curseg_write_pointer()
4827 type, cs->segno, cs->next_blkoff); in fix_curseg_write_pointer()
4910 struct f2fs_sb_info *sbi, unsigned int segno) in f2fs_usable_zone_segs_in_sec() argument
4914 dev_idx = f2fs_target_device_index(sbi, START_BLOCK(sbi, segno)); in f2fs_usable_zone_segs_in_sec()
4915 zone_idx = get_zone_idx(sbi, GET_SEC_FROM_SEG(sbi, segno), dev_idx); in f2fs_usable_zone_segs_in_sec()
4944 struct f2fs_sb_info *sbi, unsigned int segno) in f2fs_usable_zone_blks_in_seg() argument
4949 secno = GET_SEC_FROM_SEG(sbi, segno); in f2fs_usable_zone_blks_in_seg()
4950 seg_start = START_BLOCK(sbi, segno); in f2fs_usable_zone_blks_in_seg()
4993 unsigned int segno) in f2fs_usable_zone_blks_in_seg() argument
4999 unsigned int segno) in f2fs_usable_zone_segs_in_sec() argument
5005 unsigned int segno) in f2fs_usable_blks_in_seg() argument
5008 return f2fs_usable_zone_blks_in_seg(sbi, segno); in f2fs_usable_blks_in_seg()
5014 unsigned int segno) in f2fs_usable_segs_in_sec() argument
5017 return f2fs_usable_zone_segs_in_sec(sbi, segno); in f2fs_usable_segs_in_sec()
5028 unsigned int segno; in init_min_max_mtime() local
5034 for (segno = 0; segno < MAIN_SEGS(sbi); segno += sbi->segs_per_sec) { in init_min_max_mtime()
5039 mtime += get_seg_entry(sbi, segno + i)->mtime; in init_min_max_mtime()