Commit 1d7e10d5 authored by Chao Yu's avatar Chao Yu Committed by Jaegeuk Kim

f2fs: fix incorrect bimodal calculation

In update_sit_info, we use div_u64 to handle 'u64 divide u64' case, but
div_u64 can only handle 32-bits divisor, so our divisor with u64 type
passed to div_u64 will overflow, result in the wrong calculation when
show debug info of f2fs as below:

BDF: 464, avg. vblocks: 23509
(BDF should never exceed 100)

So change to use div64_u64 to handle this case correctly.
Signed-off-by: default avatarChao Yu <chao2.yu@samsung.com>
Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
parent 4abd3f5a
...@@ -118,7 +118,7 @@ static void update_sit_info(struct f2fs_sb_info *sbi) ...@@ -118,7 +118,7 @@ static void update_sit_info(struct f2fs_sb_info *sbi)
} }
} }
dist = div_u64(MAIN_SECS(sbi) * hblks_per_sec * hblks_per_sec, 100); dist = div_u64(MAIN_SECS(sbi) * hblks_per_sec * hblks_per_sec, 100);
si->bimodal = div_u64(bimodal, dist); si->bimodal = div64_u64(bimodal, dist);
if (si->dirty_count) if (si->dirty_count)
si->avg_vblocks = div_u64(total_vblocks, ndirty); si->avg_vblocks = div_u64(total_vblocks, ndirty);
else else
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment