Lines Matching refs:sbi
168 static void migrate_main(struct f2fs_sb_info *sbi, unsigned int offset)
178 for (i = MAIN_SEGS(sbi) - 1; i >= 0; i--) {
179 se = get_seg_entry(sbi, i);
183 for (j = sbi->blocks_per_seg - 1; j >= 0; j--) {
187 from = START_BLOCK(sbi, i) + j;
195 get_sum_entry(sbi, from, &sum);
198 update_data_blkaddr(sbi, le32_to_cpu(sum.nid),
201 update_nat_blkaddr(sbi, 0,
207 START_BLOCK(sbi, 0),
208 START_BLOCK(sbi, 0) + offset);
211 static void move_ssa(struct f2fs_sb_info *sbi, unsigned int segno,
217 sum_blk = get_sum_block(sbi, segno, &type);
224 type, segno, GET_SUM_BLKADDR(sbi, segno),
235 static void migrate_ssa(struct f2fs_sb_info *sbi,
238 struct f2fs_super_block *sb = F2FS_RAW_SUPER(sbi);
243 MAIN_SEGS(sbi) - offset;
253 move_ssa(sbi, offset++, blkaddr++);
261 offset = MAIN_SEGS(sbi) - 1;
267 move_ssa(sbi, offset--, blkaddr--);
277 static int shrink_nats(struct f2fs_sb_info *sbi,
280 struct f2fs_super_block *sb = F2FS_RAW_SUPER(sbi);
281 struct f2fs_nm_info *nm_i = NM_I(sbi);
301 seg_off = block_off >> sbi->log_blocks_per_seg;
303 (seg_off << sbi->log_blocks_per_seg << 1) +
304 (block_off & ((1 << sbi->log_blocks_per_seg) - 1)));
307 block_addr += sbi->blocks_per_seg;
325 static void migrate_nat(struct f2fs_sb_info *sbi,
328 struct f2fs_super_block *sb = F2FS_RAW_SUPER(sbi);
329 struct f2fs_nm_info *nm_i = NM_I(sbi);
344 seg_off = block_off >> sbi->log_blocks_per_seg;
346 (seg_off << sbi->log_blocks_per_seg << 1) +
347 (block_off & ((1 << sbi->log_blocks_per_seg) - 1)));
351 block_addr += sbi->blocks_per_seg;
359 (seg_off << sbi->log_blocks_per_seg << 1) +
360 (block_off & ((1 << sbi->log_blocks_per_seg) - 1)));
380 seg_off = block_off >> sbi->log_blocks_per_seg;
382 (seg_off << sbi->log_blocks_per_seg << 1) +
383 (block_off & ((1 << sbi->log_blocks_per_seg) - 1)));
393 static void migrate_sit(struct f2fs_sb_info *sbi,
396 struct sit_info *sit_i = SIT_I(sbi);
401 (sbi->log_blocks_per_seg - 1);
415 for (segno = 0; segno < MAIN_SEGS(sbi); segno++) {
418 se = get_seg_entry(sbi, segno);
451 static void rebuild_checkpoint(struct f2fs_sb_info *sbi,
454 struct f2fs_checkpoint *cp = F2FS_CKPT(sbi);
457 struct f2fs_super_block *sb = F2FS_RAW_SUPER(sbi);
486 free_segment_count = get_free_segments(sbi);
495 orphan_blks = __start_sum_addr(sbi) - 1;
504 CURSEG_I(sbi, i)->segno - offset);
509 CURSEG_I(sbi, i)->segno - offset);
550 if (sbi->cur_cp == 2)
577 struct curseg_info *curseg = CURSEG_I(sbi, i);
589 write_nat_bits(sbi, new_sb, new_cp, sbi->cur_cp == 1 ? 2 : 1);
601 static int f2fs_resize_check(struct f2fs_sb_info *sbi, struct f2fs_super_block *new_sb)
603 struct f2fs_checkpoint *cp = F2FS_CKPT(sbi);
621 static int f2fs_resize_grow(struct f2fs_sb_info *sbi)
623 struct f2fs_super_block *sb = F2FS_RAW_SUPER(sbi);
632 flush_journal_entries(sbi);
634 memcpy(new_sb, F2FS_RAW_SUPER(sbi), sizeof(*new_sb));
638 if (f2fs_resize_check(sbi, new_sb) < 0)
643 err = shrink_nats(sbi, new_sb);
658 err = f2fs_defragment(sbi, old_main_blkaddr, offset,
666 migrate_main(sbi, offset);
668 migrate_ssa(sbi, new_sb, offset_seg);
669 migrate_nat(sbi, new_sb);
670 migrate_sit(sbi, new_sb, offset_seg);
671 rebuild_checkpoint(sbi, new_sb, offset_seg);
679 static int f2fs_resize_shrink(struct f2fs_sb_info *sbi)
681 struct f2fs_super_block *sb = F2FS_RAW_SUPER(sbi);
690 flush_journal_entries(sbi);
692 memcpy(new_sb, F2FS_RAW_SUPER(sbi), sizeof(*new_sb));
696 if (f2fs_resize_check(sbi, new_sb) < 0)
701 err = shrink_nats(sbi, new_sb);
717 err = f2fs_defragment(sbi, tmp_end_blkaddr,
727 rebuild_checkpoint(sbi, new_sb, 0);
729 migrate_sit(sbi, new_sb, offset_seg);
730 migrate_nat(sbi, new_sb);
731 migrate_ssa(sbi, new_sb, offset_seg);
736 // migrate_main(sbi, offset);
743 int f2fs_resize(struct f2fs_sb_info *sbi)
745 struct f2fs_super_block *sb = F2FS_RAW_SUPER(sbi);
754 return f2fs_resize_shrink(sbi);
759 return f2fs_resize_grow(sbi);