]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
f2fs: alloc new section if curseg is not the first seg in its zone
authorSheng Yong <shengyong@oppo.com>
Thu, 30 May 2024 10:01:58 +0000 (18:01 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Wed, 12 Jun 2024 15:46:02 +0000 (15:46 +0000)
If curseg is not the first segment in its zone, the zone is not empty.
A new section should be allocated and avoid resetting the old zone.

Reviewed-by: Chao Yu <chao@kernel.org>
Signed-off-by: Sheng Yong <shengyong@oppo.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/segment.c

index a0ce3d080f80a1662fe6444c99cfe2e991e5184e..c4d951ed54ffbe2889d7cc84920aae17bf6b78e6 100644 (file)
@@ -5187,7 +5187,8 @@ static int fix_curseg_write_pointer(struct f2fs_sb_info *sbi, int type)
        }
 
        /* Allocate a new section if it's not new. */
-       if (cs->next_blkoff) {
+       if (cs->next_blkoff ||
+           cs->segno != GET_SEG_FROM_SEC(sbi, GET_ZONE_FROM_SEC(sbi, cs_section))) {
                unsigned int old_segno = cs->segno, old_blkoff = cs->next_blkoff;
 
                f2fs_allocate_new_section(sbi, type, true);