From: Jens Rehsack <s...@netbsd.org>

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 <s...@netbsd.org>
---
 ...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 <mjean...@efficios.com>
+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 <j...@suse.cz>
+  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 <mjean...@efficios.com>
+Signed-off-by: Mathieu Desnoyers <mathieu.desnoy...@efficios.com>
+---
+ .../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: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub  
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to