mirror of
https://gitee.com/openharmony/third_party_f2fs-tools
synced 2024-11-26 19:51:32 +00:00
f2fs-tools: fix # of total segments
TOTAL_SEGS should include metadata segments and main segments. Reviewed-by: Chao Yu <chao@kernel.org> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
parent
79410835d2
commit
6d50a75823
@ -463,6 +463,7 @@ static inline block_t __end_block_addr(struct f2fs_sb_info *sbi)
|
||||
#define GET_R2L_SEGNO(sbi, segno) (segno + FREE_I_START_SEGNO(sbi))
|
||||
|
||||
#define MAIN_SEGS(sbi) (SM_I(sbi)->main_segments)
|
||||
#define TOTAL_SEGS(sbi) (SM_I(sbi)->segment_count)
|
||||
#define TOTAL_BLKS(sbi) (TOTAL_SEGS(sbi) << (sbi)->log_blocks_per_seg)
|
||||
#define MAX_BLKADDR(sbi) (SEG0_BLKADDR(sbi) + TOTAL_BLKS(sbi))
|
||||
|
||||
@ -511,7 +512,6 @@ struct fsync_inode_entry {
|
||||
((segno) % sit_i->sents_per_block)
|
||||
#define SIT_BLOCK_OFFSET(sit_i, segno) \
|
||||
((segno) / SIT_ENTRY_PER_BLOCK)
|
||||
#define TOTAL_SEGS(sbi) (SM_I(sbi)->main_segments)
|
||||
|
||||
static inline bool IS_VALID_NID(struct f2fs_sb_info *sbi, u32 nid)
|
||||
{
|
||||
|
@ -2064,7 +2064,7 @@ int fsck_chk_meta(struct f2fs_sb_info *sbi)
|
||||
unsigned int i;
|
||||
|
||||
/* 1. check sit usage with CP: curseg is lost? */
|
||||
for (i = 0; i < TOTAL_SEGS(sbi); i++) {
|
||||
for (i = 0; i < MAIN_SEGS(sbi); i++) {
|
||||
se = get_seg_entry(sbi, i);
|
||||
if (se->valid_blocks != 0)
|
||||
sit_valid_segs++;
|
||||
@ -2607,7 +2607,7 @@ int check_sit_types(struct f2fs_sb_info *sbi)
|
||||
unsigned int i;
|
||||
int err = 0;
|
||||
|
||||
for (i = 0; i < TOTAL_SEGS(sbi); i++) {
|
||||
for (i = 0; i < MAIN_SEGS(sbi); i++) {
|
||||
struct seg_entry *se;
|
||||
|
||||
se = get_seg_entry(sbi, i);
|
||||
|
26
fsck/mount.c
26
fsck/mount.c
@ -81,7 +81,7 @@ unsigned int get_usable_seg_count(struct f2fs_sb_info *sbi)
|
||||
{
|
||||
unsigned int i, usable_seg_count = 0;
|
||||
|
||||
for (i = 0; i < TOTAL_SEGS(sbi); i++)
|
||||
for (i = 0; i < MAIN_SEGS(sbi); i++)
|
||||
if (is_usable_seg(sbi, i))
|
||||
usable_seg_count++;
|
||||
|
||||
@ -97,7 +97,7 @@ bool is_usable_seg(struct f2fs_sb_info *UNUSED(sbi), unsigned int UNUSED(segno))
|
||||
|
||||
unsigned int get_usable_seg_count(struct f2fs_sb_info *sbi)
|
||||
{
|
||||
return TOTAL_SEGS(sbi);
|
||||
return MAIN_SEGS(sbi);
|
||||
}
|
||||
|
||||
#endif
|
||||
@ -106,7 +106,7 @@ u32 get_free_segments(struct f2fs_sb_info *sbi)
|
||||
{
|
||||
u32 i, free_segs = 0;
|
||||
|
||||
for (i = 0; i < TOTAL_SEGS(sbi); i++) {
|
||||
for (i = 0; i < MAIN_SEGS(sbi); i++) {
|
||||
struct seg_entry *se = get_seg_entry(sbi, i);
|
||||
|
||||
if (se->valid_blocks == 0x0 && !IS_CUR_SEGNO(sbi, i) &&
|
||||
@ -1829,13 +1829,13 @@ int build_sit_info(struct f2fs_sb_info *sbi)
|
||||
|
||||
SM_I(sbi)->sit_info = sit_i;
|
||||
|
||||
sit_i->sentries = calloc(TOTAL_SEGS(sbi) * sizeof(struct seg_entry), 1);
|
||||
sit_i->sentries = calloc(MAIN_SEGS(sbi) * sizeof(struct seg_entry), 1);
|
||||
if (!sit_i->sentries) {
|
||||
MSG(1, "\tError: Calloc failed for build_sit_info!\n");
|
||||
goto free_sit_info;
|
||||
}
|
||||
|
||||
bitmap_size = TOTAL_SEGS(sbi) * SIT_VBLOCK_MAP_SIZE;
|
||||
bitmap_size = MAIN_SEGS(sbi) * SIT_VBLOCK_MAP_SIZE;
|
||||
|
||||
if (need_fsync_data_record(sbi))
|
||||
bitmap_size += bitmap_size;
|
||||
@ -1848,7 +1848,7 @@ int build_sit_info(struct f2fs_sb_info *sbi)
|
||||
|
||||
bitmap = sit_i->bitmap;
|
||||
|
||||
for (start = 0; start < TOTAL_SEGS(sbi); start++) {
|
||||
for (start = 0; start < MAIN_SEGS(sbi); start++) {
|
||||
sit_i->sentries[start].cur_valid_map = bitmap;
|
||||
bitmap += SIT_VBLOCK_MAP_SIZE;
|
||||
|
||||
@ -2100,7 +2100,7 @@ static int build_curseg(struct f2fs_sb_info *sbi)
|
||||
blk_off = get_cp(cur_node_blkoff[i - CURSEG_HOT_NODE]);
|
||||
segno = get_cp(cur_node_segno[i - CURSEG_HOT_NODE]);
|
||||
}
|
||||
ASSERT(segno < TOTAL_SEGS(sbi));
|
||||
ASSERT(segno < MAIN_SEGS(sbi));
|
||||
ASSERT(blk_off < DEFAULT_BLOCKS_PER_SEGMENT);
|
||||
|
||||
array[i].segno = segno;
|
||||
@ -2462,7 +2462,7 @@ static int build_sit_entries(struct f2fs_sb_info *sbi)
|
||||
segno = start_blk * sit_i->sents_per_block;
|
||||
end = (start_blk + readed) * sit_i->sents_per_block;
|
||||
|
||||
for (; segno < end && segno < TOTAL_SEGS(sbi); segno++) {
|
||||
for (; segno < end && segno < MAIN_SEGS(sbi); segno++) {
|
||||
se = &sit_i->sentries[segno];
|
||||
|
||||
get_current_sit_page(sbi, segno, sit_blk);
|
||||
@ -2488,7 +2488,7 @@ static int build_sit_entries(struct f2fs_sb_info *sbi)
|
||||
for (i = 0; i < sits_in_cursum(journal); i++) {
|
||||
segno = le32_to_cpu(segno_in_journal(journal, i));
|
||||
|
||||
if (segno >= TOTAL_SEGS(sbi)) {
|
||||
if (segno >= MAIN_SEGS(sbi)) {
|
||||
MSG(0, "\tError: build_sit_entries: segno(%u) is invalid!!!\n", segno);
|
||||
journal->n_sits = cpu_to_le16(i);
|
||||
c.fix_on = 1;
|
||||
@ -2565,7 +2565,7 @@ void build_sit_area_bitmap(struct f2fs_sb_info *sbi)
|
||||
|
||||
ASSERT(fsck->sit_area_bitmap_sz == fsck->main_area_bitmap_sz);
|
||||
|
||||
for (segno = 0; segno < TOTAL_SEGS(sbi); segno++) {
|
||||
for (segno = 0; segno < MAIN_SEGS(sbi); segno++) {
|
||||
se = get_seg_entry(sbi, segno);
|
||||
|
||||
memcpy(ptr, se->cur_valid_map, SIT_VBLOCK_MAP_SIZE);
|
||||
@ -2611,7 +2611,7 @@ void rewrite_sit_area_bitmap(struct f2fs_sb_info *sbi)
|
||||
|
||||
ptr = fsck->main_area_bitmap;
|
||||
|
||||
for (segno = 0; segno < TOTAL_SEGS(sbi); segno++) {
|
||||
for (segno = 0; segno < MAIN_SEGS(sbi); segno++) {
|
||||
struct f2fs_sit_entry *sit;
|
||||
struct seg_entry *se;
|
||||
u16 valid_blocks = 0;
|
||||
@ -2734,7 +2734,7 @@ void flush_sit_entries(struct f2fs_sb_info *sbi)
|
||||
sit_blk = calloc(BLOCK_SZ, 1);
|
||||
ASSERT(sit_blk);
|
||||
/* update free segments */
|
||||
for (segno = 0; segno < TOTAL_SEGS(sbi); segno++) {
|
||||
for (segno = 0; segno < MAIN_SEGS(sbi); segno++) {
|
||||
struct f2fs_sit_entry *sit;
|
||||
struct seg_entry *se;
|
||||
|
||||
@ -3440,7 +3440,7 @@ static int find_fsync_inode(struct f2fs_sb_info *sbi, struct list_head *head)
|
||||
struct f2fs_node *node_blk;
|
||||
block_t blkaddr;
|
||||
unsigned int loop_cnt = 0;
|
||||
unsigned int free_blocks = TOTAL_SEGS(sbi) * sbi->blocks_per_seg -
|
||||
unsigned int free_blocks = MAIN_SEGS(sbi) * sbi->blocks_per_seg -
|
||||
sbi->total_valid_block_count;
|
||||
int err = 0;
|
||||
|
||||
|
@ -175,7 +175,7 @@ static void migrate_main(struct f2fs_sb_info *sbi, unsigned int offset)
|
||||
|
||||
ASSERT(raw != NULL);
|
||||
|
||||
for (i = TOTAL_SEGS(sbi) - 1; i >= 0; i--) {
|
||||
for (i = MAIN_SEGS(sbi) - 1; i >= 0; i--) {
|
||||
se = get_seg_entry(sbi, i);
|
||||
if (!se->valid_blocks)
|
||||
continue;
|
||||
@ -240,7 +240,7 @@ static void migrate_ssa(struct f2fs_sb_info *sbi,
|
||||
block_t new_sum_blkaddr = get_newsb(ssa_blkaddr);
|
||||
block_t end_sum_blkaddr = get_newsb(main_blkaddr);
|
||||
block_t expand_sum_blkaddr = new_sum_blkaddr +
|
||||
TOTAL_SEGS(sbi) - offset;
|
||||
MAIN_SEGS(sbi) - offset;
|
||||
block_t blkaddr;
|
||||
int ret;
|
||||
void *zero_block = calloc(BLOCK_SZ, 1);
|
||||
@ -258,7 +258,7 @@ static void migrate_ssa(struct f2fs_sb_info *sbi,
|
||||
}
|
||||
} else {
|
||||
blkaddr = end_sum_blkaddr - 1;
|
||||
offset = TOTAL_SEGS(sbi) - 1;
|
||||
offset = MAIN_SEGS(sbi) - 1;
|
||||
while (blkaddr >= new_sum_blkaddr) {
|
||||
if (blkaddr >= expand_sum_blkaddr) {
|
||||
ret = dev_write_block(zero_block, blkaddr--);
|
||||
@ -412,7 +412,7 @@ static void migrate_sit(struct f2fs_sb_info *sbi,
|
||||
DBG(3, "Write zero sit: %x\n", get_newsb(sit_blkaddr) + index);
|
||||
}
|
||||
|
||||
for (segno = 0; segno < TOTAL_SEGS(sbi); segno++) {
|
||||
for (segno = 0; segno < MAIN_SEGS(sbi); segno++) {
|
||||
struct f2fs_sit_entry *sit;
|
||||
|
||||
se = get_seg_entry(sbi, segno);
|
||||
|
Loading…
Reference in New Issue
Block a user