diff --git a/recipes-kernel/linux/files/0001-Revert-writeback-Fix-sync-livelock-due-to-b_dirty_ti.patch b/recipes-kernel/linux/files/0001-Revert-writeback-Fix-sync-livelock-due-to-b_dirty_ti.patch deleted file mode 100644 index 70c14ab..0000000 --- a/recipes-kernel/linux/files/0001-Revert-writeback-Fix-sync-livelock-due-to-b_dirty_ti.patch +++ /dev/null @@ -1,194 +0,0 @@ -From a9d72cb8d30eb0ab0175e9b055f0a1a19a8142b0 Mon Sep 17 00:00:00 2001 -From: Martin Jansa -Date: Mon, 14 Sep 2020 16:24:07 +0200 -Subject: [PATCH] Revert "writeback: Fix sync livelock due to b_dirty_time - processing" - -This reverts commit 6623c19042b63018230e9468ac16cd1be01abaa3. - -* fixes: - lttng-modules/2.12.2-r0/lttng-modules-2.12.2/probes/../probes/lttng-tracepoint-event-impl.h:131:6: error: conflicting types for 'trace_writeback_queue_io' - -* The issue is that writeback_queue_io was updated in lttng-modules in: - https://github.com/lttng/lttng-modules/commit/817e02f9e256b8f2cbb9e3125eb061757b83bd4a - which isn't included in 2.12.2 version currently in oe-core and even if it is, then it - checks for kernel version 5.9 and won't work with this commit backported from 5.9 to rpi-5.4.y. - at least until this lttng-modules commit which improves the LINUX_VERSION_CODE check to - include LTTNG_KERNEL_RANGE(5,4,62, 5,5,0) - https://github.com/lttng/lttng-modules/commit/b6af46d166c48c9e59600a60b5a2a7ead10f179a - -Upstream-Status: Pending -Signed-off-by: Martin Jansa - ---- - fs/fs-writeback.c | 44 ++++++++++++++++++++------------ - include/trace/events/writeback.h | 13 +++++----- - 2 files changed, 34 insertions(+), 23 deletions(-) - -diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c -index 5f6400ba82c0..51f87b673084 100644 ---- a/fs/fs-writeback.c -+++ b/fs/fs-writeback.c -@@ -42,6 +42,7 @@ - struct wb_writeback_work { - long nr_pages; - struct super_block *sb; -+ unsigned long *older_than_this; - enum writeback_sync_modes sync_mode; - unsigned int tagged_writepages:1; - unsigned int for_kupdate:1; -@@ -1233,13 +1234,16 @@ static bool inode_dirtied_after(struct inode *inode, unsigned long t) - #define EXPIRE_DIRTY_ATIME 0x0001 - - /* -- * Move expired (dirtied before dirtied_before) dirty inodes from -+ * Move expired (dirtied before work->older_than_this) dirty inodes from - * @delaying_queue to @dispatch_queue. - */ - static int move_expired_inodes(struct list_head *delaying_queue, - struct list_head *dispatch_queue, -- int flags, unsigned long dirtied_before) -+ int flags, -+ struct wb_writeback_work *work) - { -+ unsigned long *older_than_this = NULL; -+ unsigned long expire_time; - LIST_HEAD(tmp); - struct list_head *pos, *node; - struct super_block *sb = NULL; -@@ -1247,9 +1251,16 @@ static int move_expired_inodes(struct list_head *delaying_queue, - int do_sb_sort = 0; - int moved = 0; - -+ if ((flags & EXPIRE_DIRTY_ATIME) == 0) -+ older_than_this = work->older_than_this; -+ else if (!work->for_sync) { -+ expire_time = jiffies - (dirtytime_expire_interval * HZ); -+ older_than_this = &expire_time; -+ } - while (!list_empty(delaying_queue)) { - inode = wb_inode(delaying_queue->prev); -- if (inode_dirtied_after(inode, dirtied_before)) -+ if (older_than_this && -+ inode_dirtied_after(inode, *older_than_this)) - break; - list_move(&inode->i_io_list, &tmp); - moved++; -@@ -1295,22 +1306,18 @@ static int move_expired_inodes(struct list_head *delaying_queue, - * | - * +--> dequeue for IO - */ --static void queue_io(struct bdi_writeback *wb, struct wb_writeback_work *work, -- unsigned long dirtied_before) -+static void queue_io(struct bdi_writeback *wb, struct wb_writeback_work *work) - { - int moved; -- unsigned long time_expire_jif = dirtied_before; - - assert_spin_locked(&wb->list_lock); - list_splice_init(&wb->b_more_io, &wb->b_io); -- moved = move_expired_inodes(&wb->b_dirty, &wb->b_io, 0, dirtied_before); -- if (!work->for_sync) -- time_expire_jif = jiffies - dirtytime_expire_interval * HZ; -+ moved = move_expired_inodes(&wb->b_dirty, &wb->b_io, 0, work); - moved += move_expired_inodes(&wb->b_dirty_time, &wb->b_io, -- EXPIRE_DIRTY_ATIME, time_expire_jif); -+ EXPIRE_DIRTY_ATIME, work); - if (moved) - wb_io_lists_populated(wb); -- trace_writeback_queue_io(wb, work, dirtied_before, moved); -+ trace_writeback_queue_io(wb, work, moved); - } - - static int write_inode(struct inode *inode, struct writeback_control *wbc) -@@ -1822,7 +1829,7 @@ static long writeback_inodes_wb(struct bdi_writeback *wb, long nr_pages, - blk_start_plug(&plug); - spin_lock(&wb->list_lock); - if (list_empty(&wb->b_io)) -- queue_io(wb, &work, jiffies); -+ queue_io(wb, &work); - __writeback_inodes_wb(wb, &work); - spin_unlock(&wb->list_lock); - blk_finish_plug(&plug); -@@ -1842,7 +1849,7 @@ static long writeback_inodes_wb(struct bdi_writeback *wb, long nr_pages, - * takes longer than a dirty_writeback_interval interval, then leave a - * one-second gap. - * -- * dirtied_before takes precedence over nr_to_write. So we'll only write back -+ * older_than_this takes precedence over nr_to_write. So we'll only write back - * all dirty pages if they are all attached to "old" mappings. - */ - static long wb_writeback(struct bdi_writeback *wb, -@@ -1850,11 +1857,14 @@ static long wb_writeback(struct bdi_writeback *wb, - { - unsigned long wb_start = jiffies; - long nr_pages = work->nr_pages; -- unsigned long dirtied_before = jiffies; -+ unsigned long oldest_jif; - struct inode *inode; - long progress; - struct blk_plug plug; - -+ oldest_jif = jiffies; -+ work->older_than_this = &oldest_jif; -+ - blk_start_plug(&plug); - spin_lock(&wb->list_lock); - for (;;) { -@@ -1888,14 +1898,14 @@ static long wb_writeback(struct bdi_writeback *wb, - * safe. - */ - if (work->for_kupdate) { -- dirtied_before = jiffies - -+ oldest_jif = jiffies - - msecs_to_jiffies(dirty_expire_interval * 10); - } else if (work->for_background) -- dirtied_before = jiffies; -+ oldest_jif = jiffies; - - trace_writeback_start(wb, work); - if (list_empty(&wb->b_io)) -- queue_io(wb, work, dirtied_before); -+ queue_io(wb, work); - if (work->sb) - progress = writeback_sb_inodes(work->sb, wb, work); - else -diff --git a/include/trace/events/writeback.h b/include/trace/events/writeback.h -index 67434278b81d..66282552db20 100644 ---- a/include/trace/events/writeback.h -+++ b/include/trace/events/writeback.h -@@ -499,9 +499,8 @@ DEFINE_WBC_EVENT(wbc_writepage); - TRACE_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_ARGS(wb, work, moved), - TP_STRUCT__entry( - __array(char, name, 32) - __field(unsigned long, older) -@@ -511,17 +510,19 @@ TRACE_EVENT(writeback_queue_io, - __field(unsigned int, cgroup_ino) - ), - TP_fast_assign( -+ unsigned long *older_than_this = work->older_than_this; - strscpy_pad(__entry->name, bdi_dev_name(wb->bdi), 32); -- __entry->older = dirtied_before; -- __entry->age = (jiffies - dirtied_before) * 1000 / HZ; -+ __entry->older = older_than_this ? *older_than_this : 0; -+ __entry->age = older_than_this ? -+ (jiffies - *older_than_this) * 1000 / HZ : -1; - __entry->moved = moved; - __entry->reason = work->reason; - __entry->cgroup_ino = __trace_wb_assign_cgroup(wb); - ), - TP_printk("bdi %s: older=%lu age=%ld enqueue=%d reason=%s cgroup_ino=%u", - __entry->name, -- __entry->older, /* dirtied_before in jiffies */ -- __entry->age, /* dirtied_before in relative milliseconds */ -+ __entry->older, /* older_than_this in jiffies */ -+ __entry->age, /* older_than_this in relative milliseconds */ - __entry->moved, - __print_symbolic(__entry->reason, WB_WORK_REASON), - __entry->cgroup_ino diff --git a/recipes-kernel/linux/linux-raspberrypi_5.4.bb b/recipes-kernel/linux/linux-raspberrypi_5.4.bb index 48e198f..571b144 100644 --- a/recipes-kernel/linux/linux-raspberrypi_5.4.bb +++ b/recipes-kernel/linux/linux-raspberrypi_5.4.bb @@ -9,7 +9,6 @@ require linux-raspberrypi_5.4.inc SRC_URI += "file://0001-Revert-selftests-bpf-Skip-perf-hw-events-test-if-the.patch \ file://0002-Revert-selftests-bpf-Fix-perf_buffer-test-on-systems.patch \ file://0001-perf-cs-etm-Move-definition-of-traceid_list-global-v.patch \ - file://0001-Revert-writeback-Fix-sync-livelock-due-to-b_dirty_ti.patch \ file://powersave.cfg \ file://android-drivers.cfg \ "