mirror of
https://github.com/hardkernel/linux.git
synced 2026-04-01 18:53:02 +09:00
ext4: fix lazy initialization next schedule time computation in more granular unit
commit39fec6889dupstream. 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:bfff68738f("ext4: add support for lazy inode table initialization") Signed-off-by: Shaoying Xu <shaoyi@amazon.com> Cc: stable@vger.kernel.org Signed-off-by: Theodore Ts'o <tytso@mit.edu> Link: https://lore.kernel.org/r/20210902164412.9994-2-shaoyi@amazon.com Signed-off-by: Theodore Ts'o <tytso@mit.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
a57977b0b8
commit
0898c7a70a
@@ -3026,8 +3026,8 @@ static int ext4_run_li_request(struct ext4_li_request *elr)
|
||||
struct ext4_group_desc *gdp = NULL;
|
||||
ext4_group_t group, ngroups;
|
||||
struct super_block *sb;
|
||||
unsigned long timeout = 0;
|
||||
int ret = 0;
|
||||
u64 start_time;
|
||||
|
||||
sb = elr->lr_super;
|
||||
ngroups = EXT4_SB(sb)->s_groups_count;
|
||||
@@ -3047,13 +3047,12 @@ static int ext4_run_li_request(struct ext4_li_request *elr)
|
||||
ret = 1;
|
||||
|
||||
if (!ret) {
|
||||
timeout = jiffies;
|
||||
start_time = ktime_get_real_ns();
|
||||
ret = ext4_init_inode_table(sb, group,
|
||||
elr->lr_timeout ? 0 : 1);
|
||||
if (elr->lr_timeout == 0) {
|
||||
timeout = (jiffies - timeout) *
|
||||
elr->lr_sbi->s_li_wait_mult;
|
||||
elr->lr_timeout = timeout;
|
||||
elr->lr_timeout = nsecs_to_jiffies((ktime_get_real_ns() - start_time) *
|
||||
elr->lr_sbi->s_li_wait_mult);
|
||||
}
|
||||
elr->lr_next_sched = jiffies + elr->lr_timeout;
|
||||
elr->lr_next_group = group + 1;
|
||||
|
||||
Reference in New Issue
Block a user