From: Greg Kroah-Hartman Date: Thu, 18 Nov 2021 08:26:54 +0000 (+0100) Subject: 4.14-stable patches X-Git-Tag: v5.14.20~3 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8b04df370f67d3f78533af9235979308eaa7b382;p=thirdparty%2Fkernel%2Fstable-queue.git 4.14-stable patches added patches: ext4-fix-lazy-initialization-next-schedule-time-computation-in-more-granular-unit.patch --- diff --git a/queue-4.14/ext4-fix-lazy-initialization-next-schedule-time-computation-in-more-granular-unit.patch b/queue-4.14/ext4-fix-lazy-initialization-next-schedule-time-computation-in-more-granular-unit.patch new file mode 100644 index 00000000000..d131f9ddca6 --- /dev/null +++ b/queue-4.14/ext4-fix-lazy-initialization-next-schedule-time-computation-in-more-granular-unit.patch @@ -0,0 +1,57 @@ +From 39fec6889d15a658c3a3ebb06fd69d3584ddffd3 Mon Sep 17 00:00:00 2001 +From: Shaoying Xu +Date: Thu, 2 Sep 2021 16:44:12 +0000 +Subject: ext4: fix lazy initialization next schedule time computation in more granular unit + +From: Shaoying Xu + +commit 39fec6889d15a658c3a3ebb06fd69d3584ddffd3 upstream. + +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 +Cc: stable@vger.kernel.org +Signed-off-by: Theodore Ts'o +Link: https://lore.kernel.org/r/20210902164412.9994-2-shaoyi@amazon.com +Signed-off-by: Theodore Ts'o +Signed-off-by: Greg Kroah-Hartman + +--- + fs/ext4/super.c | 9 ++++----- + 1 file changed, 4 insertions(+), 5 deletions(-) + +--- a/fs/ext4/super.c ++++ b/fs/ext4/super.c +@@ -2952,8 +2952,8 @@ static int ext4_run_li_request(struct ex + 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; +@@ -2973,13 +2973,12 @@ static int ext4_run_li_request(struct ex + 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; diff --git a/queue-4.14/series b/queue-4.14/series index 80f51242bef..21ff64e50aa 100644 --- a/queue-4.14/series +++ b/queue-4.14/series @@ -195,3 +195,4 @@ mm-oom-pagefault_out_of_memory-don-t-force-global-oom-for-dying-tasks.patch mm-oom-do-not-trigger-out_of_memory-from-the-pf.patch s390-cio-check-the-subchannel-validity-for-dev_busid.patch pci-add-pci_exp_devctl_payload_-macros.patch +ext4-fix-lazy-initialization-next-schedule-time-computation-in-more-granular-unit.patch