From: liujinbao1 <[email protected]>

During the f2fs_get_victim process, when the f2fs_need_rand_seg is enabled in 
select_policy,
p->offset is a random value, and the search range is from p->offset to 
MAIN_SECS.
When segno >= last_segment, the loop breaks and exits directly without searching
the range from 0 to p->offset.This results in an incomplete search when the 
random
offset is not zero.

Signed-off-by: liujinbao1 <[email protected]>
---
 fs/f2fs/gc.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
index 384fa7e2085b..a5b333bbb201 100644
--- a/fs/f2fs/gc.c
+++ b/fs/f2fs/gc.c
@@ -312,10 +312,11 @@ static void select_policy(struct f2fs_sb_info *sbi, int 
gc_type,
                p->max_search = sbi->max_victim_search;
 
        /* let's select beginning hot/small space first. */
-       if (f2fs_need_rand_seg(sbi))
+       if (f2fs_need_rand_seg(sbi)) {
                p->offset = get_random_u32_below(MAIN_SECS(sbi) *
                                                SEGS_PER_SEC(sbi));
-       else if (type == CURSEG_HOT_DATA || IS_NODESEG(type))
+               SIT_I(sbi)->last_victim[p->gc_mode] = p->offset;
+       } else if (type == CURSEG_HOT_DATA || IS_NODESEG(type))
                p->offset = 0;
        else
                p->offset = SIT_I(sbi)->last_victim[p->gc_mode];
-- 
2.25.1



_______________________________________________
Linux-f2fs-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to