Re: [PATCH 1/1] ext4: fix lazy initialization next schedule time computation in more granular unit
From: Jan Kara <jack@suse.cz>
Date: 2021-10-14 09:57:02
Also in:
lkml
On Tue 17-08-21 22:56:54, Shaoying Xu wrote:
Ext4 file system has default lazy inode table initialization setup once
it is mounted. However, it has issue on computing the next schedule time
that makes the timeout same amount in jiffies but different real time in
secs if with various HZ values. Therefore, fix by measuring the current
time in a more granular unit nanoseconds and make the next schedule time
independent of the HZ value.
Fixes: bfff68738f1c ("ext4: add support for lazy inode table initialization")
Signed-off-by: Shaoying Xu <redacted>
Cc: stable@vger.kernel.orgThanks for the patch. It seems to have fallen through the cracks. It looks good just some nits: The timeout will be still dependent on the HZ value because we use jiffie-granular timer. But yes, I guess it is unnecessary to make the imprecision 10x worse when we know we are likely dealing with small numbers.
quoted hunk ↗ jump to hunk
@@ -3460,14 +3460,13 @@ static int ext4_run_li_request(struct ext4_li_request *elr) ret = 1; if (!ret) {
Please add a comment here so that we don't forget. Like: /* Use ns-granular time as init can be really fast */ With this feel free to add: Reviewed-by: Jan Kara <jack@suse.cz>
- timeout = jiffies;
+ start_time = ktime_get_real_ns();
ret = ext4_init_inode_table(sb, group,
elr->lr_timeout ? 0 : 1);
trace_ext4_lazy_itable_init(sb, group);
if (elr->lr_timeout == 0) {
- timeout = (jiffies - timeout) *
- EXT4_SB(elr->lr_super)->s_li_wait_mult;
- elr->lr_timeout = timeout;
+ elr->lr_timeout = nsecs_to_jiffies((ktime_get_real_ns() - start_time) *
+ EXT4_SB(elr->lr_super)->s_li_wait_mult);
}
elr->lr_next_sched = jiffies + elr->lr_timeout;
elr->lr_next_group = group + 1;Honza -- Jan Kara [off-list ref] SUSE Labs, CR