Message ID | 20230202082028.9013-1-qixiaoyu1@xiaomi.com (mailing list archive) |
---|---|
State | Accepted |
Commit | b03a41a495df35f8e8d25220878bd6b8472d9396 |
Headers | show |
Series | [f2fs-dev,1/2,v3] f2fs: fix wrong calculation of block age | expand |
On 2023/2/2 16:20, qixiaoyu1 wrote: > Currently we wrongly calculate the new block age to > old * LAST_AGE_WEIGHT / 100. > > Fix it to new * (100 - LAST_AGE_WEIGHT) / 100 > + old * LAST_AGE_WEIGHT / 100. > > Signed-off-by: qixiaoyu1 <qixiaoyu1@xiaomi.com> > Signed-off-by: xiongping1 <xiongping1@xiaomi.com> Reviewed-by: Chao Yu <chao@kernel.org> Thanks,
Hello: This series was applied to jaegeuk/f2fs.git (dev) by Jaegeuk Kim <jaegeuk@kernel.org>: On Thu, 2 Feb 2023 16:20:27 +0800 you wrote: > Currently we wrongly calculate the new block age to > old * LAST_AGE_WEIGHT / 100. > > Fix it to new * (100 - LAST_AGE_WEIGHT) / 100 > + old * LAST_AGE_WEIGHT / 100. > > Signed-off-by: qixiaoyu1 <qixiaoyu1@xiaomi.com> > Signed-off-by: xiongping1 <xiongping1@xiaomi.com> > > [...] Here is the summary with links: - [f2fs-dev,1/2,v3] f2fs: fix wrong calculation of block age https://git.kernel.org/jaegeuk/f2fs/c/b03a41a495df - [f2fs-dev,2/2,v3] f2fs: add sysfs nodes to set last_age_weight (no matching commit) You are awesome, thank you!
diff --git a/fs/f2fs/extent_cache.c b/fs/f2fs/extent_cache.c index 342af24b2f8c..d9f12f404beb 100644 --- a/fs/f2fs/extent_cache.c +++ b/fs/f2fs/extent_cache.c @@ -874,11 +874,18 @@ void f2fs_update_read_extent_tree_range_compressed(struct inode *inode, static unsigned long long __calculate_block_age(unsigned long long new, unsigned long long old) { - unsigned long long diff; + unsigned int rem_old, rem_new; + unsigned long long res; - diff = (new >= old) ? new - (new - old) : new + (old - new); + res = div_u64_rem(new, 100, &rem_new) * (100 - LAST_AGE_WEIGHT) + + div_u64_rem(old, 100, &rem_old) * LAST_AGE_WEIGHT; - return div_u64(diff * LAST_AGE_WEIGHT, 100); + if (rem_new) + res += rem_new * (100 - LAST_AGE_WEIGHT) / 100; + if (rem_old) + res += rem_old * LAST_AGE_WEIGHT / 100; + + return res; } /* This returns a new age and allocated blocks in ei */