From: Jian Yu Date: Wed, 3 Mar 2021 01:41:12 +0000 (-0800) Subject: LU-14395 kernel: kernel update RHEL7.9 [3.10.0-1160.15.2.el7] X-Git-Tag: 2.14.51~47 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=refs%2Fchanges%2F22%2F41822%2F4;p=fs%2Flustre-release.git LU-14395 kernel: kernel update RHEL7.9 [3.10.0-1160.15.2.el7] Update RHEL7.9 kernel to 3.10.0-1160.15.2.el7. Change debuginfo download location since debuginfo.centos.org does not provide kernel-debuginfo-common anymore. The patch also reverts the following fix from RHEL 7.9 kernel since version 3.10.0-1160.8.1.el7: - [kernel] timer: Fix lockup in __run_timers() caused by large jiffies/timer_jiffies delta (Waiman Long) [1849716] The above fix caused Hard LOCKUP kernel panic. Test-Parameters: clientdistro=el7.9 serverdistro=el7.9 Change-Id: Icdd9e8bf4bd595dece266f6c5a9b0de344781a93 Signed-off-by: Jian Yu Signed-off-by: Minh Diep Reviewed-on: https://review.whamcloud.com/41822 Tested-by: jenkins Reviewed-by: Yang Sheng Tested-by: Maloo Reviewed-by: Andreas Dilger --- diff --git a/contrib/lbuild/lbuild-rhel7 b/contrib/lbuild/lbuild-rhel7 index 721d56b..8226945 100644 --- a/contrib/lbuild/lbuild-rhel7 +++ b/contrib/lbuild/lbuild-rhel7 @@ -111,7 +111,7 @@ kernel_srpm_location() { kernel_debuginfo_location() { - echo "http://debuginfo.centos.org/7/x86_64/" + echo "http://mirror.facebook.net/centos-debuginfo/7/x86_64/" } diff --git a/lustre/ChangeLog b/lustre/ChangeLog index 3c55087..e25d1d7 100644 --- a/lustre/ChangeLog +++ b/lustre/ChangeLog @@ -5,7 +5,7 @@ TBD Whamcloud * Server primary kernels built and tested during release cycle: 3.10.0-1062.18.1.el7 (RHEL7.7) 3.10.0-1127.19.1.el7 (RHEL7.8) - 3.10.0-1160.6.1.el7 (RHEL7.9) + 3.10.0-1160.15.2.el7 (RHEL7.9) * Other server kernels known to build and work at some point (others may also work): 3.10.0-862.14.4.el7 (RHEL7.5) 3.10.0-957.27.2.el7 (RHEL7.6) @@ -23,7 +23,7 @@ TBD Whamcloud * Client primary kernels built and tested during release cycle: 3.10.0-1062.18.1.el7 (RHEL7.7) 3.10.0-1127.19.1.el7 (RHEL7.8) - 3.10.0-1160.6.1.el7 (RHEL7.9) + 3.10.0-1160.15.2.el7 (RHEL7.9) 4.12.14-95.48 (SLES12 SP4) 4.12.14-122.20 (SLES12 SP5) 4.12.14-197.75 (SLES15 SP1) diff --git a/lustre/kernel_patches/patches/revert-fix-lockup-in-run_timers-large-jiffies-delta.patch b/lustre/kernel_patches/patches/revert-fix-lockup-in-run_timers-large-jiffies-delta.patch new file mode 100644 index 0000000..a8c1796 --- /dev/null +++ b/lustre/kernel_patches/patches/revert-fix-lockup-in-run_timers-large-jiffies-delta.patch @@ -0,0 +1,112 @@ +--- linux-3.10.0-1160.11.1.el7.x86_64/kernel/timer.c 2020-11-30 12:40:05.000000000 -0500 ++++ linux-3.10.0-1160.6.1.el7.x86_64/kernel/timer.c 2020-10-21 13:17:08.000000000 -0400 +@@ -1213,95 +1213,6 @@ + } + } + +-/* +- * Total number of list_head entries in tv1-tv5 of struct tvec_base. +- */ +-#define TVEC_LEN ((offsetofend(struct tvec_base, tv5) - \ +- offsetof(struct tvec_base, tv1)) / \ +- sizeof(struct list_head)) +- +-/** +- * requeue_timers - requeue all the timers in the timer wheel +- * @base: the timer vector to be processed. +- * +- * When a cpu is idle for a long period of time, it is possible that +- * timer_jiffies can significantly lag behind jiffies making the iterative +- * jiffies check in __run_timers() takes a long time to complete causing +- * soft or hard system lockup. +- * +- * This function remedies this situation by requeuing all the timers in +- * the cascading timer wheel and adjusting timer_jiffies to the min() of +- * current jiffies and the expiry times of all active timers. The expiry +- * times of expired deferrable timers will be set to the new timer_jiffies. +- */ +-static noinline void requeue_timers(struct tvec_base *base) +-{ +- struct timer_list *timer, *tmp; +- struct list_head list, head, *vecs; +- unsigned long min_jiffies = jiffies; +- unsigned long nactive = base->active_timers; +- unsigned long nall = base->all_timers; +- int i; +- +- lockdep_assert_held(&base->lock); +- INIT_LIST_HEAD(&head); +- +- /* +- * tv1-tv5 are processed together as a single array of list_head's. +- */ +- vecs = (struct list_head *)&base->tv1; +- for (i = 0; i < TVEC_LEN; i++, vecs++) { +- if (list_empty(vecs)) +- continue; +- +- list_replace_init(vecs, &list); +- +- /* +- * Check all the timers in list and move them over to head. +- */ +- list_for_each_entry_safe(timer, tmp, &list, entry) { +- base->all_timers--; +- if (!tbase_get_deferrable(timer->base)) { +- base->active_timers--; +- if (time_before(timer->expires, min_jiffies)) +- min_jiffies = timer->expires; +- } +- list_add_tail(&timer->entry, &head); +- } +- if (!base->all_timers) +- break; +- } +- WARN_ON_ONCE(base->all_timers || base->active_timers); +- +- /* +- * Restore all_timers and active_timers. +- * Requeue timers back into timer wheel with timer_jiffies +- * set to min_jiffies. +- */ +- base->all_timers = nall; +- base->active_timers = nactive; +- base->timer_jiffies = min_jiffies; +- +- list_for_each_entry_safe(timer, tmp, &head, entry) { +- unsigned long old_expires; +- bool restore = false; +- +- /* +- * For expiry time that is < min_jiffies (deferrable ones), +- * temporarily change it to min_jiffies, insert the timer +- * without accounting and restore the expiry time. +- */ +- if (time_before(timer->expires, min_jiffies)) { +- old_expires = timer->expires; +- timer->expires = min_jiffies; +- restore = true; +- } +- __internal_add_timer(base, timer); +- if (restore) +- timer->expires = old_expires; +- } +-} +- + #define INDEX(N) ((base->timer_jiffies >> (TVR_BITS + (N) * TVN_BITS)) & TVN_MASK) + + /** +@@ -1317,13 +1228,6 @@ + + spin_lock_irq(&base->lock); + +- /* +- * Requeue the timers if jiffies - timer_jiffies >= 2*TVEC_LEN. +- */ +- if (base->all_timers && +- time_after_eq(jiffies, base->timer_jiffies + 2 * TVEC_LEN)) +- requeue_timers(base); +- + while (time_after_eq(jiffies, base->timer_jiffies)) { + struct list_head work_list; + struct list_head *head = &work_list; diff --git a/lustre/kernel_patches/series/3.10-rhel7.9.series b/lustre/kernel_patches/series/3.10-rhel7.9.series index c3af94a..cf8e197 100644 --- a/lustre/kernel_patches/series/3.10-rhel7.9.series +++ b/lustre/kernel_patches/series/3.10-rhel7.9.series @@ -3,3 +3,4 @@ fix-integrity-verify-rhel7.patch block-integrity-allow-optional-integrity-functions-rhel7.patch block-pass-bio-into-integrity_processing_fn-rhel7.patch block-Ensure-we-only-enable-integrity-metadata-for-reads-and-writes-rhel7.patch +revert-fix-lockup-in-run_timers-large-jiffies-delta.patch diff --git a/lustre/kernel_patches/targets/3.10-rhel7.9.target.in b/lustre/kernel_patches/targets/3.10-rhel7.9.target.in index 01c2b51..d7dca49 100644 --- a/lustre/kernel_patches/targets/3.10-rhel7.9.target.in +++ b/lustre/kernel_patches/targets/3.10-rhel7.9.target.in @@ -1,5 +1,5 @@ lnxmaj="3.10.0" -lnxrel="1160.6.1.el7" +lnxrel="1160.15.2.el7" KERNEL_SRPM=kernel-${lnxmaj}-${lnxrel}.src.rpm SERIES=3.10-rhel7.9.series diff --git a/lustre/kernel_patches/which_patch b/lustre/kernel_patches/which_patch index 8bddb29..ffbb657 100644 --- a/lustre/kernel_patches/which_patch +++ b/lustre/kernel_patches/which_patch @@ -16,7 +16,7 @@ PATCH SERIES FOR SERVER KERNELS: 3.10-rhel7.6.series 3.10.0-957.27.2.el7 (RHEL 7.6) 3.10-rhel7.7.series 3.10.0-1062.18.1.el7 (RHEL 7.7) 3.10-rhel7.8.series 3.10.0-1127.19.1.el7 (RHEL 7.8) -3.10-rhel7.9.series 3.10.0-1160.6.1.el7 (RHEL 7.9) +3.10-rhel7.9.series 3.10.0-1160.15.2.el7 (RHEL 7.9) 4.18-rhel8.series 4.18.0-80.11.2.el8 (RHEL 8.0) 4.18-rhel8.1.series 4.18.0-147.8.1.el8 (RHEL 8.1) 4.18-rhel8.2.series 4.18.0-193.28.1.el8 (RHEL 8.2)