This fixes the block allocation direction from left to right inside one segment despite of the direction of segment allocation.
Signed-off-by: Junling Zheng <zhengjunl...@huawei.com> --- fsck/mount.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/fsck/mount.c b/fsck/mount.c index 1396a2e..38d2aa2 100644 --- a/fsck/mount.c +++ b/fsck/mount.c @@ -1921,13 +1921,13 @@ int find_next_free_block(struct f2fs_sb_info *sbi, u64 *to, int left, int type) if (se->valid_blocks == sbi->blocks_per_seg || IS_CUR_SEGNO(sbi, segno, type)) { - *to = left ? START_BLOCK(sbi, segno) - 1: + *to = left ? START_BLOCK(sbi, segno - 1) : START_BLOCK(sbi, segno + 1); continue; } if (se->valid_blocks == 0 && not_enough) { - *to = left ? START_BLOCK(sbi, segno) - 1: + *to = left ? START_BLOCK(sbi, segno - 1) : START_BLOCK(sbi, segno + 1); continue; } @@ -1949,7 +1949,10 @@ int find_next_free_block(struct f2fs_sb_info *sbi, u64 *to, int left, int type) !f2fs_test_bit(offset, (const char *)se->cur_valid_map)) return 0; - *to = left ? *to - 1: *to + 1; + if (!(OFFSET_IN_SEG(sbi, *to + 1)) && left) + *to = START_BLOCK(sbi, segno - 1); + else + *to = *to + 1; } return -1; } -- 2.16.2 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel