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

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

diff --git a/queue-4.19/ext4-fix-lazy-initialization-next-schedule-time-computation-in-more-granular-unit.patch b/queue-4.19/ext4-fix-lazy-initialization-next-schedule-time-computation-in-more-granular-unit.patch
new file mode 100644 (file)
index 0000000..769cae5
--- /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
+@@ -3026,8 +3026,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;
+@@ -3047,13 +3047,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 9088120f1c71ea22a96906454941d7d98e612a73..7c7866b5789f3ae2f207ca79bf90c96948f5c0bb 100644 (file)
@@ -248,3 +248,4 @@ s390-tape-fix-timer-initialization-in-tape_std_assign.patch
 pci-add-pci_exp_devctl_payload_-macros.patch
 fuse-truncate-pagecache-on-atomic_o_trunc.patch
 x86-cpu-fix-migration-safety-with-x86_bug_null_sel.patch
+ext4-fix-lazy-initialization-next-schedule-time-computation-in-more-granular-unit.patch