]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.14-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 18 Nov 2021 08:26:54 +0000 (09:26 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 18 Nov 2021 08:26:54 +0000 (09:26 +0100)
added patches:
ext4-fix-lazy-initialization-next-schedule-time-computation-in-more-granular-unit.patch

queue-4.14/ext4-fix-lazy-initialization-next-schedule-time-computation-in-more-granular-unit.patch [new file with mode: 0644]
queue-4.14/series

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 (file)
index 0000000..d131f9d
--- /dev/null
@@ -0,0 +1,57 @@
+From 39fec6889d15a658c3a3ebb06fd69d3584ddffd3 Mon Sep 17 00:00:00 2001
+From: Shaoying Xu <shaoyi@amazon.com>
+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 <shaoyi@amazon.com>
+
+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 <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>
+
+---
+ 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;
index 80f51242bef25e6d930b55bba735d28f9383478f..21ff64e50aa157b2e086eee7870e637eb0982c93 100644 (file)
@@ -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