From: Jens Rehsack <[email protected]>
Backport patch from lttng-modules/stable-2.12
87b2aff fix: writeback: Fix sync livelock due to b_dirty_time processing
(v5.9)
with minor modfication to catch
6623c19042b6 writeback: Fix sync livelock due to b_dirty_time processing
from linux/stable-5.4 v5.4.62+
Signed-off-by: Jens Rehsack <[email protected]>
---
...x-sync-livelock-due-to-b_dirty_time-.patch | 117 ++++++++++++++++++
.../lttng/lttng-modules_2.12.2.bb | 1 +
2 files changed, 118 insertions(+)
create mode 100644
meta/recipes-kernel/lttng/lttng-modules/0001-fix-writeback-Fix-sync-livelock-due-to-b_dirty_time-.patch
diff --git
a/meta/recipes-kernel/lttng/lttng-modules/0001-fix-writeback-Fix-sync-livelock-due-to-b_dirty_time-.patch
b/meta/recipes-kernel/lttng/lttng-modules/0001-fix-writeback-Fix-sync-livelock-due-to-b_dirty_time-.patch
new file mode 100644
index 0000000000..96a1c486ef
--- /dev/null
+++
b/meta/recipes-kernel/lttng/lttng-modules/0001-fix-writeback-Fix-sync-livelock-due-to-b_dirty_time-.patch
@@ -0,0 +1,117 @@
+From 87b2affc3eb06f3fb2d0923f18af37713eb6814b Mon Sep 17 00:00:00 2001
+From: Michael Jeanson <[email protected]>
+Date: Mon, 31 Aug 2020 14:16:01 -0400
+Subject: [PATCH] fix: writeback: Fix sync livelock due to b_dirty_time
+ processing (v5.9)
+
+See upstream commit:
+
+ commit f9cae926f35e8230330f28c7b743ad088611a8de
+ Author: Jan Kara <[email protected]>
+ Date: Fri May 29 16:08:58 2020 +0200
+
+ writeback: Fix sync livelock due to b_dirty_time processing
+
+ When we are processing writeback for sync(2), move_expired_inodes()
+ didn't set any inode expiry value (older_than_this). This can result in
+ writeback never completing if there's steady stream of inodes added to
+ b_dirty_time list as writeback rechecks dirty lists after each writeback
+ round whether there's more work to be done. Fix the problem by using
+ sync(2) start time is inode expiry value when processing b_dirty_time
+ list similarly as for ordinarily dirtied inodes. This requires some
+ refactoring of older_than_this handling which simplifies the code
+ noticeably as a bonus.
+
+Change-Id: I8b894b13ccc14d9b8983ee4c2810a927c319560b
+Signed-off-by: Michael Jeanson <[email protected]>
+Signed-off-by: Mathieu Desnoyers <[email protected]>
+---
+ .../events/lttng-module/writeback.h | 39 ++++++++++++-------
+ 1 file changed, 26 insertions(+), 13 deletions(-)
+
+Upstream Status: Backport
+
+diff --git a/instrumentation/events/lttng-module/writeback.h
b/instrumentation/events/lttng-module/writeback.h
+index ece67ad..e9018dd 100644
+--- a/instrumentation/events/lttng-module/writeback.h
++++ b/instrumentation/events/lttng-module/writeback.h
+@@ -384,34 +384,48 @@
LTTNG_TRACEPOINT_EVENT_WBC_INSTANCE(wbc_balance_dirty_wait, writeback_wbc_balanc
+ #endif
+ LTTNG_TRACEPOINT_EVENT_WBC_INSTANCE(wbc_writepage, writeback_wbc_writepage)
+
+-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0))
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,9,0)) || (LINUX_VERSION_CODE >=
KERNEL_VERSION(5,4,62))
++LTTNG_TRACEPOINT_EVENT(writeback_queue_io,
++ TP_PROTO(struct bdi_writeback *wb,
++ struct wb_writeback_work *work,
++ unsigned long dirtied_before,
++ int moved),
++ TP_ARGS(wb, work, dirtied_before, moved),
++ TP_FIELDS(
++ ctf_array_text(char, name, dev_name(wb->bdi->dev), 32)
++ ctf_integer(unsigned long, older, dirtied_before)
++ ctf_integer(int, moved, moved)
++ )
++)
++#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0))
+ LTTNG_TRACEPOINT_EVENT(writeback_queue_io,
+ TP_PROTO(struct bdi_writeback *wb,
+-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0))
+ struct wb_writeback_work *work,
+-#else
+- unsigned long *older_than_this,
+-#endif
+ int moved),
+-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0))
+ TP_ARGS(wb, work, moved),
+-#else
++ TP_FIELDS(
++ ctf_array_text(char, name, dev_name(wb->bdi->dev), 32)
++ ctf_integer(int, moved, moved)
++ )
++)
++#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0))
++LTTNG_TRACEPOINT_EVENT(writeback_queue_io,
++ TP_PROTO(struct bdi_writeback *wb,
++ unsigned long *older_than_this,
++ int moved),
+ TP_ARGS(wb, older_than_this, moved),
+-#endif
+ TP_FIELDS(
+ ctf_array_text(char, name, dev_name(wb->bdi->dev), 32)
+-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0))
+-#else
+ ctf_integer(unsigned long, older,
+ older_than_this ? *older_than_this : 0)
+ ctf_integer(long, age,
+ older_than_this ?
+ (jiffies - *older_than_this) * 1000 / HZ
+ : -1)
+-#endif
+ ctf_integer(int, moved, moved)
+ )
+ )
++#endif
+
+ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,8,0))
+ LTTNG_TRACEPOINT_EVENT_MAP(global_dirty_state,
+@@ -460,7 +474,7 @@ LTTNG_TRACEPOINT_EVENT_MAP(global_dirty_state,
+ ctf_integer(unsigned long, dirty_limit, global_dirty_limit)
+ )
+ )
+-#else
++#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0))
+ LTTNG_TRACEPOINT_EVENT_MAP(global_dirty_state,
+
+ writeback_global_dirty_state,
+@@ -485,7 +499,6 @@ LTTNG_TRACEPOINT_EVENT_MAP(global_dirty_state,
+ )
+ )
+ #endif
+-#endif
+
+ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0))
+
+--
+2.17.1
+
diff --git a/meta/recipes-kernel/lttng/lttng-modules_2.12.2.bb
b/meta/recipes-kernel/lttng/lttng-modules_2.12.2.bb
index 0e1a209ce8..f58b3bf0d7 100644
--- a/meta/recipes-kernel/lttng/lttng-modules_2.12.2.bb
+++ b/meta/recipes-kernel/lttng/lttng-modules_2.12.2.bb
@@ -10,6 +10,7 @@ include lttng-platforms.inc
SRC_URI = "https://lttng.org/files/${BPN}/${BPN}-${PV}.tar.bz2 \
file://Makefile-Do-not-fail-if-CONFIG_TRACEPOINTS-is-not-en.patch \
+
file://0001-fix-writeback-Fix-sync-livelock-due-to-b_dirty_time-.patch \
file://BUILD_RUNTIME_BUG_ON-vs-gcc7.patch \
"
--
2.17.1
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#142497):
https://lists.openembedded.org/g/openembedded-core/message/142497
Mute This Topic: https://lists.openembedded.org/mt/76837437/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-