get_ckpt_valid_blocks() checks valid ckpt blocks in current section.
It counts all vblocks from the first to the last segment in the
large section. However, START_SEGNO() is used to get the first segno
in an SIT block. This patch fixes that to get the correct start segno.

Fixes: 61461fc921b7 ("f2fs: fix to avoid touching checkpointed data in 
get_victim()")
Signed-off-by: Sheng Yong <shengy...@oppo.com>
---
 fs/f2fs/segment.h | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/fs/f2fs/segment.h b/fs/f2fs/segment.h
index e1c0f418aa11..6ed5bc811d2c 100644
--- a/fs/f2fs/segment.h
+++ b/fs/f2fs/segment.h
@@ -347,7 +347,8 @@ static inline unsigned int get_ckpt_valid_blocks(struct 
f2fs_sb_info *sbi,
                                unsigned int segno, bool use_section)
 {
        if (use_section && __is_large_section(sbi)) {
-               unsigned int start_segno = START_SEGNO(segno);
+               unsigned int start_segno = segno / SEGS_PER_SEC(sbi) *
+                                                       SEGS_PER_SEC(sbi);
                unsigned int blocks = 0;
                int i;
 
-- 
2.40.1



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to