In my latest round of linux-yocto reference updates, I ran into these
same issues, but I needed to pull in more of the fixes on the 2.12
branch than just this to get things building against 5.8.9.

I didn't need to tweak any of the patches for v5.4.64+ here.

I have 10 backported patches and confirmed my 5.8.9 and 5.4.65 both
build with the changes.

I can submit that patch along with my reference kernel bumps later today.

Bruce


On Mon, Sep 14, 2020 at 3:52 AM Jens Rehsack <[email protected]> wrote:
>
> 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
>
> 



--
- Thou shalt not follow the NULL pointer, for chaos and madness await
thee at its end
- "Use the force Harry" - Gandalf, Star Trek II
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.

View/Reply Online (#142551): 
https://lists.openembedded.org/g/openembedded-core/message/142551
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]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to