Lines Matching defs:segno
892 static void __locate_dirty_segment(struct f2fs_sb_info *sbi, unsigned int segno,
898 if (IS_CURSEG(sbi, segno))
901 if (!test_and_set_bit(segno, dirty_i->dirty_segmap[dirty_type]))
905 struct seg_entry *sentry = get_seg_entry(sbi, segno);
912 if (!test_and_set_bit(segno, dirty_i->dirty_segmap[t]))
916 unsigned int secno = GET_SEC_FROM_SEG(sbi, segno);
918 get_valid_blocks(sbi, segno, true);
929 static void __remove_dirty_segment(struct f2fs_sb_info *sbi, unsigned int segno,
935 if (test_and_clear_bit(segno, dirty_i->dirty_segmap[dirty_type]))
939 struct seg_entry *sentry = get_seg_entry(sbi, segno);
942 if (test_and_clear_bit(segno, dirty_i->dirty_segmap[t]))
945 valid_blocks = get_valid_blocks(sbi, segno, true);
947 clear_bit(GET_SEC_FROM_SEG(sbi, segno),
950 clear_bit(segno, SIT_I(sbi)->invalid_segmap);
954 unsigned int secno = GET_SEC_FROM_SEG(sbi, segno);
973 static void locate_dirty_segment(struct f2fs_sb_info *sbi, unsigned int segno)
979 if (segno == NULL_SEGNO || IS_CURSEG(sbi, segno))
982 usable_blocks = f2fs_usable_blks_in_seg(sbi, segno);
985 valid_blocks = get_valid_blocks(sbi, segno, false);
986 ckpt_valid_blocks = get_ckpt_valid_blocks(sbi, segno, false);
990 __locate_dirty_segment(sbi, segno, PRE);
991 __remove_dirty_segment(sbi, segno, DIRTY);
993 __locate_dirty_segment(sbi, segno, DIRTY);
996 __remove_dirty_segment(sbi, segno, DIRTY);
1006 unsigned int segno;
1009 for_each_set_bit(segno, dirty_i->dirty_segmap[DIRTY], MAIN_SEGS(sbi)) {
1010 if (get_valid_blocks(sbi, segno, false))
1012 if (IS_CURSEG(sbi, segno))
1014 __locate_dirty_segment(sbi, segno, PRE);
1015 __remove_dirty_segment(sbi, segno, DIRTY);
1029 unsigned int segno;
1032 for_each_set_bit(segno, dirty_i->dirty_segmap[DIRTY], MAIN_SEGS(sbi)) {
1033 se = get_seg_entry(sbi, segno);
1035 holes[NODE] += f2fs_usable_blks_in_seg(sbi, segno) -
1038 holes[DATA] += f2fs_usable_blks_in_seg(sbi, segno) -
1065 unsigned int segno = 0;
1068 for_each_set_bit(segno, dirty_i->dirty_segmap[DIRTY], MAIN_SEGS(sbi)) {
1069 if (get_valid_blocks(sbi, segno, false))
1071 if (get_ckpt_valid_blocks(sbi, segno, false))
1074 return segno;
1194 unsigned int segno;
1200 segno = GET_SEGNO(sbi, blk);
1201 sentry = get_seg_entry(sbi, segno);
1204 if (end < START_BLOCK(sbi, segno + 1))
1211 blk = START_BLOCK(sbi, segno + 1);
2118 unsigned int segno;
2121 for_each_set_bit(segno, dirty_i->dirty_segmap[PRE], MAIN_SEGS(sbi))
2122 __set_test_and_free(sbi, segno, false);
2293 static bool __mark_sit_entry_dirty(struct f2fs_sb_info *sbi, unsigned int segno)
2297 if (!__test_and_set_bit(segno, sit_i->dirty_sentries_bitmap)) {
2306 unsigned int segno, int modified)
2308 struct seg_entry *se = get_seg_entry(sbi, segno);
2311 __mark_sit_entry_dirty(sbi, segno);
2317 unsigned int segno = GET_SEGNO(sbi, blkaddr);
2319 if (segno == NULL_SEGNO)
2321 return get_seg_entry(sbi, segno)->mtime;
2328 unsigned int segno = GET_SEGNO(sbi, blkaddr);
2332 if (segno == NULL_SEGNO)
2335 se = get_seg_entry(sbi, segno);
2350 unsigned int segno, offset;
2357 segno = GET_SEGNO(sbi, blkaddr);
2359 se = get_seg_entry(sbi, segno);
2364 (new_vblocks > f2fs_usable_blks_in_seg(sbi, segno))));
2436 __mark_sit_entry_dirty(sbi, segno);
2442 get_sec_entry(sbi, segno)->valid_blocks += del;
2447 unsigned int segno = GET_SEGNO(sbi, addr);
2463 locate_dirty_segment(sbi, segno);
2471 unsigned int segno, offset;
2480 segno = GET_SEGNO(sbi, blkaddr);
2481 se = get_seg_entry(sbi, segno);
2537 struct page *f2fs_get_sum_page(struct f2fs_sb_info *sbi, unsigned int segno)
2541 return f2fs_get_meta_page_retry(sbi, GET_SUM_BLOCK(sbi, segno));
2589 unsigned int segno = curseg->segno + 1;
2592 if (segno < MAIN_SEGS(sbi) && segno % sbi->segs_per_sec)
2593 return !test_bit(segno, free_i->free_segmap);
2605 unsigned int segno, secno, zoneno;
2617 segno = find_next_zero_bit(free_i->free_segmap,
2619 if (segno < GET_SEG_FROM_SEC(sbi, hint + 1))
2649 segno = GET_SEG_FROM_SEC(sbi, secno);
2682 f2fs_bug_on(sbi, test_bit(segno, free_i->free_segmap));
2683 __set_inuse(sbi, segno);
2684 *newseg = segno;
2695 curseg->segno = curseg->next_segno;
2696 curseg->zone = GET_ZONE_FROM_SEG(sbi, curseg->segno);
2709 __set_sit_entry_type(sbi, seg_type, curseg->segno, modified);
2721 return curseg->segno;
2741 return curseg->segno;
2752 unsigned int segno = curseg->segno;
2757 GET_SUM_BLOCK(sbi, segno));
2764 segno = __get_next_segno(sbi, type);
2765 get_new_segment(sbi, &segno, new_sec, dir);
2766 curseg->next_segno = segno;
2774 struct seg_entry *se = get_seg_entry(sbi, seg->segno);
2803 bool f2fs_segment_has_free_slot(struct f2fs_sb_info *sbi, int segno)
2805 struct seg_entry *se = get_seg_entry(sbi, segno);
2834 GET_SUM_BLOCK(sbi, curseg->segno));
2915 if (get_valid_blocks(sbi, curseg->segno, false)) {
2917 GET_SUM_BLOCK(sbi, curseg->segno));
2920 __set_test_and_free(sbi, curseg->segno, true);
2942 if (get_valid_blocks(sbi, curseg->segno, false))
2946 __set_test_and_inuse(sbi, curseg->segno);
2965 unsigned segno = NULL_SEGNO;
2973 if (!v_ops->get_victim(sbi, &segno, BG_GC, seg_type, alloc_mode, age)) {
2974 curseg->next_segno = segno;
3000 if (!v_ops->get_victim(sbi, &segno, BG_GC, i, alloc_mode, age)) {
3001 curseg->next_segno = segno;
3008 segno = get_free_segment(sbi);
3009 if (segno != NULL_SEGNO) {
3010 curseg->next_segno = segno;
3052 unsigned int segno;
3058 segno = CURSEG_I(sbi, type)->segno;
3059 if (segno < start || segno > end)
3069 locate_dirty_segment(sbi, segno);
3073 if (segno != curseg->segno)
3075 type, segno, curseg->segno);
3091 get_valid_blocks(sbi, curseg->segno, new_sec))
3094 if (!get_ckpt_valid_blocks(sbi, curseg->segno, new_sec))
3097 old_segno = curseg->segno;
3306 curseg->segno);
3713 unsigned int segno;
3719 segno = GET_SEGNO(sbi, fio->new_blkaddr);
3721 if (!IS_DATASEG(get_seg_entry(sbi, segno)->type)) {
3724 __func__, segno);
3743 unsigned int segno)
3748 if (CURSEG_I(sbi, i)->segno == segno)
3761 unsigned int segno, old_cursegno;
3766 segno = GET_SEGNO(sbi, new_blkaddr);
3767 se = get_seg_entry(sbi, segno);
3774 if (se->valid_blocks == 0 && !IS_CURSEG(sbi, segno)) {
3781 if (IS_CURSEG(sbi, segno)) {
3783 type = __f2fs_get_curseg(sbi, segno);
3796 old_cursegno = curseg->segno;
3800 if (segno != curseg->segno) {
3801 curseg->next_segno = segno;
3827 if (old_cursegno != curseg->segno) {
3928 unsigned int segno;
3931 segno = le32_to_cpu(ckpt->cur_data_segno[i]);
3933 seg_i->next_segno = segno;
3971 unsigned int segno = 0;
3977 segno = le32_to_cpu(ckpt->cur_data_segno[type]);
3985 segno = le32_to_cpu(ckpt->cur_node_segno[type -
3993 blk_addr = GET_SUM_BLOCK(sbi, segno);
4010 err = f2fs_restore_node_summary(sbi, segno, sum);
4027 curseg->next_segno = segno;
4187 unsigned int segno)
4189 return f2fs_get_meta_page(sbi, current_sit_addr(sbi, segno));
4242 static void add_sit_entry(unsigned int segno, struct list_head *head)
4245 unsigned int start_segno = START_SEGNO(segno);
4267 unsigned int segno;
4269 for_each_set_bit(segno, bitmap, MAIN_SEGS(sbi))
4270 add_sit_entry(segno, set_list);
4281 unsigned int segno;
4284 segno = le32_to_cpu(segno_in_journal(journal, i));
4285 dirtied = __mark_sit_entry_dirty(sbi, segno);
4288 add_sit_entry(segno, &SM_I(sbi)->sit_entry_set);
4340 unsigned int segno = start_segno;
4354 for_each_set_bit_from(segno, bitmap, end) {
4357 se = get_seg_entry(sbi, segno);
4366 cpc->trim_start = segno;
4372 SIT_JOURNAL, segno, 1);
4375 cpu_to_le32(segno);
4378 check_block_count(sbi, segno,
4381 sit_offset = SIT_ENTRY_OFFSET(sit_i, segno);
4384 check_block_count(sbi, segno,
4388 __clear_bit(segno, bitmap);
4586 array[i].segno = NULL_SEGNO;
4631 f2fs_err(sbi, "Invalid segment type: %u, segno: %u",
4664 f2fs_err(sbi, "Wrong journal entry on segno %u",
4683 f2fs_err(sbi, "Invalid segment type: %u, segno: %u",
4749 __set_test_and_inuse(sbi, curseg_t->segno);
4757 unsigned int segno = 0, offset = 0, secno;
4763 segno = find_next_inuse(free_i, MAIN_SEGS(sbi), offset);
4764 if (segno >= MAIN_SEGS(sbi))
4766 offset = segno + 1;
4767 valid_blocks = get_valid_blocks(sbi, segno, false);
4768 usable_blks_in_seg = f2fs_usable_blks_in_seg(sbi, segno);
4776 __locate_dirty_segment(sbi, segno, DIRTY);
4784 for (segno = 0; segno < MAIN_SEGS(sbi); segno += sbi->segs_per_sec) {
4785 valid_blocks = get_valid_blocks(sbi, segno, true);
4786 secno = GET_SEC_FROM_SEG(sbi, segno);
4853 struct seg_entry *se = get_seg_entry(sbi, curseg->segno);
4876 "Current segment's next free block offset is inconsistent with bitmap, logtype:%u, segno:%u, type:%u, next_blkoff:%u, blkofs:%u",
4877 i, curseg->segno, curseg->alloc_type,
4891 unsigned int wp_segno, wp_blkoff, zone_secno, zone_segno, segno;
4916 CURSEG_I(sbi, i)->segno))
4924 segno = zone_segno + s;
4925 se = get_seg_entry(sbi, segno);
4928 last_valid_block = START_BLOCK(sbi, segno) + b;
5004 cs_section = GET_SEC_FROM_SEG(sbi, cs->segno);
5030 if (cs->segno == wp_segno && cs->next_blkoff == wp_blkoff &&
5036 type, cs->segno, cs->next_blkoff, wp_segno, wp_blkoff);
5039 "curseg[0x%x,0x%x]", type, cs->segno, cs->next_blkoff);
5047 cs_section = GET_SEC_FROM_SEG(sbi, cs->segno);
5071 type, cs->segno, cs->next_blkoff);
5140 struct f2fs_sb_info *sbi, unsigned int segno)
5148 secno = GET_SEC_FROM_SEG(sbi, segno);
5149 seg_start = START_BLOCK(sbi, segno);
5178 unsigned int segno)
5185 unsigned int segno)
5188 return f2fs_usable_zone_blks_in_seg(sbi, segno);
5194 unsigned int segno)
5208 unsigned int segno;
5214 for (segno = 0; segno < MAIN_SEGS(sbi); segno += sbi->segs_per_sec) {
5219 mtime += get_seg_entry(sbi, segno + i)->mtime;