Lines Matching defs:segno
743 static void __locate_dirty_segment(struct f2fs_sb_info *sbi, unsigned int segno,
749 if (IS_CURSEG(sbi, segno))
752 if (!test_and_set_bit(segno, dirty_i->dirty_segmap[dirty_type]))
756 struct seg_entry *sentry = get_seg_entry(sbi, segno);
763 if (!test_and_set_bit(segno, dirty_i->dirty_segmap[t]))
767 unsigned int secno = GET_SEC_FROM_SEG(sbi, segno);
769 get_valid_blocks(sbi, segno, true);
780 static void __remove_dirty_segment(struct f2fs_sb_info *sbi, unsigned int segno,
786 if (test_and_clear_bit(segno, dirty_i->dirty_segmap[dirty_type]))
790 struct seg_entry *sentry = get_seg_entry(sbi, segno);
793 if (test_and_clear_bit(segno, dirty_i->dirty_segmap[t]))
796 valid_blocks = get_valid_blocks(sbi, segno, true);
798 clear_bit(GET_SEC_FROM_SEG(sbi, segno),
801 clear_bit(segno, SIT_I(sbi)->invalid_segmap);
805 unsigned int secno = GET_SEC_FROM_SEG(sbi, segno);
824 static void locate_dirty_segment(struct f2fs_sb_info *sbi, unsigned int segno)
830 if (segno == NULL_SEGNO || IS_CURSEG(sbi, segno))
833 usable_blocks = f2fs_usable_blks_in_seg(sbi, segno);
836 valid_blocks = get_valid_blocks(sbi, segno, false);
837 ckpt_valid_blocks = get_ckpt_valid_blocks(sbi, segno, false);
841 __locate_dirty_segment(sbi, segno, PRE);
842 __remove_dirty_segment(sbi, segno, DIRTY);
844 __locate_dirty_segment(sbi, segno, DIRTY);
847 __remove_dirty_segment(sbi, segno, DIRTY);
857 unsigned int segno;
860 for_each_set_bit(segno, dirty_i->dirty_segmap[DIRTY], MAIN_SEGS(sbi)) {
861 if (get_valid_blocks(sbi, segno, false))
863 if (IS_CURSEG(sbi, segno))
865 __locate_dirty_segment(sbi, segno, PRE);
866 __remove_dirty_segment(sbi, segno, DIRTY);
880 unsigned int segno;
883 for_each_set_bit(segno, dirty_i->dirty_segmap[DIRTY], MAIN_SEGS(sbi)) {
884 se = get_seg_entry(sbi, segno);
886 holes[NODE] += f2fs_usable_blks_in_seg(sbi, segno) -
889 holes[DATA] += f2fs_usable_blks_in_seg(sbi, segno) -
916 unsigned int segno = 0;
919 for_each_set_bit(segno, dirty_i->dirty_segmap[DIRTY], MAIN_SEGS(sbi)) {
920 if (get_valid_blocks(sbi, segno, false))
922 if (get_ckpt_valid_blocks(sbi, segno, false))
925 return segno;
1133 unsigned int segno;
1139 segno = GET_SEGNO(sbi, blk);
1140 sentry = get_seg_entry(sbi, segno);
1143 if (end < START_BLOCK(sbi, segno + 1))
1150 blk = START_BLOCK(sbi, segno + 1);
2123 unsigned int segno;
2126 for_each_set_bit(segno, dirty_i->dirty_segmap[PRE], MAIN_SEGS(sbi))
2127 __set_test_and_free(sbi, segno, false);
2334 static bool __mark_sit_entry_dirty(struct f2fs_sb_info *sbi, unsigned int segno)
2338 if (!__test_and_set_bit(segno, sit_i->dirty_sentries_bitmap)) {
2347 unsigned int segno, int modified)
2349 struct seg_entry *se = get_seg_entry(sbi, segno);
2353 __mark_sit_entry_dirty(sbi, segno);
2359 unsigned int segno = GET_SEGNO(sbi, blkaddr);
2361 if (segno == NULL_SEGNO)
2363 return get_seg_entry(sbi, segno)->mtime;
2370 unsigned int segno = GET_SEGNO(sbi, blkaddr);
2374 if (segno == NULL_SEGNO)
2377 se = get_seg_entry(sbi, segno);
2392 unsigned int segno, offset;
2399 segno = GET_SEGNO(sbi, blkaddr);
2401 se = get_seg_entry(sbi, segno);
2406 (new_vblocks > f2fs_usable_blks_in_seg(sbi, segno))));
2480 __mark_sit_entry_dirty(sbi, segno);
2486 get_sec_entry(sbi, segno)->valid_blocks += del;
2491 unsigned int segno = GET_SEGNO(sbi, addr);
2507 locate_dirty_segment(sbi, segno);
2515 unsigned int segno, offset;
2524 segno = GET_SEGNO(sbi, blkaddr);
2525 se = get_seg_entry(sbi, segno);
2574 struct page *f2fs_get_sum_page(struct f2fs_sb_info *sbi, unsigned int segno)
2578 return f2fs_get_meta_page_retry(sbi, GET_SUM_BLOCK(sbi, segno));
2626 unsigned int segno = curseg->segno + 1;
2629 if (segno < MAIN_SEGS(sbi) && segno % sbi->segs_per_sec)
2630 return !test_bit(segno, free_i->free_segmap);
2642 unsigned int segno, secno, zoneno;
2654 segno = find_next_zero_bit(free_i->free_segmap,
2656 if (segno < GET_SEG_FROM_SEC(sbi, hint + 1))
2686 segno = GET_SEG_FROM_SEC(sbi, secno);
2719 f2fs_bug_on(sbi, test_bit(segno, free_i->free_segmap));
2720 __set_inuse(sbi, segno);
2721 *newseg = segno;
2732 curseg->segno = curseg->next_segno;
2733 curseg->zone = GET_ZONE_FROM_SEG(sbi, curseg->segno);
2746 __set_sit_entry_type(sbi, seg_type, curseg->segno, modified);
2760 return curseg->segno;
2780 return curseg->segno;
2791 unsigned int segno = curseg->segno;
2796 GET_SUM_BLOCK(sbi, segno));
2803 segno = __get_next_segno(sbi, type);
2804 get_new_segment(sbi, &segno, new_sec, dir);
2805 curseg->next_segno = segno;
2814 int segno, block_t start)
2816 struct seg_entry *se = get_seg_entry(sbi, segno);
2832 return __next_free_blkoff(sbi, seg->segno, seg->next_blkoff + 1);
2835 bool f2fs_segment_has_free_slot(struct f2fs_sb_info *sbi, int segno)
2837 return __next_free_blkoff(sbi, segno, 0) < sbi->blocks_per_seg;
2852 write_sum_page(sbi, curseg->sum_blk, GET_SUM_BLOCK(sbi, curseg->segno));
2863 curseg->next_blkoff = __next_free_blkoff(sbi, curseg->segno, 0);
2933 if (get_valid_blocks(sbi, curseg->segno, false)) {
2935 GET_SUM_BLOCK(sbi, curseg->segno));
2938 __set_test_and_free(sbi, curseg->segno, true);
2960 if (get_valid_blocks(sbi, curseg->segno, false))
2964 __set_test_and_inuse(sbi, curseg->segno);
2982 unsigned segno = NULL_SEGNO;
2990 if (!f2fs_get_victim(sbi, &segno, BG_GC, seg_type, alloc_mode, age)) {
2991 curseg->next_segno = segno;
3017 if (!f2fs_get_victim(sbi, &segno, BG_GC, i, alloc_mode, age)) {
3018 curseg->next_segno = segno;
3025 segno = get_free_segment(sbi);
3026 if (segno != NULL_SEGNO) {
3027 curseg->next_segno = segno;
3054 unsigned int segno;
3060 segno = CURSEG_I(sbi, type)->segno;
3061 if (segno < start || segno > end)
3071 locate_dirty_segment(sbi, segno);
3075 if (segno != curseg->segno)
3077 type, segno, curseg->segno);
3091 !get_valid_blocks(sbi, curseg->segno, new_sec) &&
3092 !get_ckpt_valid_blocks(sbi, curseg->segno, new_sec))
3095 old_segno = curseg->segno;
3448 if (curseg->next_blkoff >= f2fs_usable_blks_in_seg(sbi, curseg->segno))
3631 unsigned int segno;
3637 segno = GET_SEGNO(sbi, fio->new_blkaddr);
3639 if (!IS_DATASEG(get_seg_entry(sbi, segno)->type)) {
3642 __func__, segno);
3682 unsigned int segno)
3687 if (CURSEG_I(sbi, i)->segno == segno)
3700 unsigned int segno, old_cursegno;
3706 segno = GET_SEGNO(sbi, new_blkaddr);
3707 se = get_seg_entry(sbi, segno);
3714 if (se->valid_blocks == 0 && !IS_CURSEG(sbi, segno)) {
3721 if (IS_CURSEG(sbi, segno)) {
3723 type = __f2fs_get_curseg(sbi, segno);
3736 old_cursegno = curseg->segno;
3741 if (segno != curseg->segno) {
3742 curseg->next_segno = segno;
3767 if (old_cursegno != curseg->segno) {
3875 unsigned int segno;
3878 segno = le32_to_cpu(ckpt->cur_data_segno[i]);
3880 seg_i->next_segno = segno;
3919 unsigned int segno = 0;
3925 segno = le32_to_cpu(ckpt->cur_data_segno[type]);
3933 segno = le32_to_cpu(ckpt->cur_node_segno[type -
3941 blk_addr = GET_SUM_BLOCK(sbi, segno);
3959 err = f2fs_restore_node_summary(sbi, segno, sum);
3976 curseg->next_segno = segno;
4131 unsigned int segno)
4133 return f2fs_get_meta_page(sbi, current_sit_addr(sbi, segno));
4189 static void add_sit_entry(unsigned int segno, struct list_head *head)
4192 unsigned int start_segno = START_SEGNO(segno);
4214 unsigned int segno;
4216 for_each_set_bit(segno, bitmap, MAIN_SEGS(sbi))
4217 add_sit_entry(segno, set_list);
4228 unsigned int segno;
4231 segno = le32_to_cpu(segno_in_journal(journal, i));
4232 dirtied = __mark_sit_entry_dirty(sbi, segno);
4235 add_sit_entry(segno, &SM_I(sbi)->sit_entry_set);
4287 unsigned int segno = start_segno;
4301 for_each_set_bit_from(segno, bitmap, end) {
4304 se = get_seg_entry(sbi, segno);
4313 cpc->trim_start = segno;
4319 SIT_JOURNAL, segno, 1);
4322 cpu_to_le32(segno);
4325 check_block_count(sbi, segno,
4328 sit_offset = SIT_ENTRY_OFFSET(sit_i, segno);
4331 check_block_count(sbi, segno,
4335 __clear_bit(segno, bitmap);
4533 array[i].segno = NULL_SEGNO;
4578 f2fs_err(sbi, "Invalid segment type: %u, segno: %u",
4615 f2fs_err(sbi, "Wrong journal entry on segno %u",
4635 f2fs_err(sbi, "Invalid segment type: %u, segno: %u",
4707 __set_test_and_inuse(sbi, curseg_t->segno);
4715 unsigned int segno = 0, offset = 0, secno;
4720 segno = find_next_inuse(free_i, MAIN_SEGS(sbi), offset);
4721 if (segno >= MAIN_SEGS(sbi))
4723 offset = segno + 1;
4724 valid_blocks = get_valid_blocks(sbi, segno, false);
4725 usable_blks_in_seg = f2fs_usable_blks_in_seg(sbi, segno);
4733 __locate_dirty_segment(sbi, segno, DIRTY);
4741 for (segno = 0; segno < MAIN_SEGS(sbi); segno += sbi->segs_per_sec) {
4742 valid_blocks = get_valid_blocks(sbi, segno, true);
4743 secno = GET_SEC_FROM_SEG(sbi, segno);
4817 struct seg_entry *se = get_seg_entry(sbi, curseg->segno);
4845 "Current segment's next free block offset is inconsistent with bitmap, logtype:%u, segno:%u, type:%u, next_blkoff:%u, blkofs:%u",
4846 i, curseg->segno, curseg->alloc_type,
4861 unsigned int wp_segno, wp_blkoff, zone_secno, zone_segno, segno;
4886 CURSEG_I(sbi, i)->segno))
4894 segno = zone_segno + s;
4895 se = get_seg_entry(sbi, segno);
4898 last_valid_block = START_BLOCK(sbi, segno) + b;
4995 cs_section = GET_SEC_FROM_SEG(sbi, cs->segno);
5021 if (cs->segno == wp_segno && cs->next_blkoff == wp_blkoff &&
5027 type, cs->segno, cs->next_blkoff, wp_segno, wp_blkoff);
5030 "curseg[0x%x,0x%x]", type, cs->segno, cs->next_blkoff);
5039 cs_section = GET_SEC_FROM_SEG(sbi, cs->segno);
5063 type, cs->segno, cs->next_blkoff);
5133 struct f2fs_sb_info *sbi, unsigned int segno)
5141 secno = GET_SEC_FROM_SEG(sbi, segno);
5142 seg_start = START_BLOCK(sbi, segno);
5171 unsigned int segno)
5178 unsigned int segno)
5181 return f2fs_usable_zone_blks_in_seg(sbi, segno);
5187 unsigned int segno)
5201 unsigned int segno;
5207 for (segno = 0; segno < MAIN_SEGS(sbi); segno += sbi->segs_per_sec) {
5212 mtime += get_seg_entry(sbi, segno + i)->mtime;