From 8661ffd571bd75f59a2ca50ce6e9bb909c17f01f Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 22 Jan 2024 11:40:25 -0800 Subject: [PATCH] 5.4-stable patches added patches: fbdev-flush-deferred-work-in-fb_deferred_io_fsync.patch rootfs-fix-support-for-rootfstype-when-root-is-given.patch --- ...eferred-work-in-fb_deferred_io_fsync.patch | 51 ++++++++++++++ ...rt-for-rootfstype-when-root-is-given.patch | 70 +++++++++++++++++++ queue-5.4/series | 2 + 3 files changed, 123 insertions(+) create mode 100644 queue-5.4/fbdev-flush-deferred-work-in-fb_deferred_io_fsync.patch create mode 100644 queue-5.4/rootfs-fix-support-for-rootfstype-when-root-is-given.patch diff --git a/queue-5.4/fbdev-flush-deferred-work-in-fb_deferred_io_fsync.patch b/queue-5.4/fbdev-flush-deferred-work-in-fb_deferred_io_fsync.patch new file mode 100644 index 00000000000..ffdabcee382 --- /dev/null +++ b/queue-5.4/fbdev-flush-deferred-work-in-fb_deferred_io_fsync.patch @@ -0,0 +1,51 @@ +From 15e4c1f462279b4e128f27de48133e0debe9e0df Mon Sep 17 00:00:00 2001 +From: Nam Cao +Date: Mon, 18 Dec 2023 10:57:30 +0100 +Subject: fbdev: flush deferred work in fb_deferred_io_fsync() + +From: Nam Cao + +commit 15e4c1f462279b4e128f27de48133e0debe9e0df upstream. + +The driver's fsync() is supposed to flush any pending operation to +hardware. It is implemented in this driver by cancelling the queued +deferred IO first, then schedule it for "immediate execution" by calling +schedule_delayed_work() again with delay=0. However, setting delay=0 +only means the work is scheduled immediately, it does not mean the work +is executed immediately. There is no guarantee that the work is finished +after schedule_delayed_work() returns. After this driver's fsync() +returns, there can still be pending work. Furthermore, if close() is +called by users immediately after fsync(), the pending work gets +cancelled and fsync() may do nothing. + +To ensure that the deferred IO completes, use flush_delayed_work() +instead. Write operations to this driver either write to the device +directly, or invoke schedule_delayed_work(); so by flushing the +workqueue, it can be guaranteed that all previous writes make it to the +device. + +Fixes: 5e841b88d23d ("fb: fsync() method for deferred I/O flush.") +Cc: stable@vger.kernel.org +Signed-off-by: Nam Cao +Reviewed-by: Sebastian Andrzej Siewior +Signed-off-by: Helge Deller +Signed-off-by: Greg Kroah-Hartman +--- + drivers/video/fbdev/core/fb_defio.c | 6 +----- + 1 file changed, 1 insertion(+), 5 deletions(-) + +--- a/drivers/video/fbdev/core/fb_defio.c ++++ b/drivers/video/fbdev/core/fb_defio.c +@@ -78,11 +78,7 @@ int fb_deferred_io_fsync(struct file *fi + return 0; + + inode_lock(inode); +- /* Kill off the delayed work */ +- cancel_delayed_work_sync(&info->deferred_work); +- +- /* Run it immediately */ +- schedule_delayed_work(&info->deferred_work, 0); ++ flush_delayed_work(&info->deferred_work); + inode_unlock(inode); + + return 0; diff --git a/queue-5.4/rootfs-fix-support-for-rootfstype-when-root-is-given.patch b/queue-5.4/rootfs-fix-support-for-rootfstype-when-root-is-given.patch new file mode 100644 index 00000000000..6baef2e6d20 --- /dev/null +++ b/queue-5.4/rootfs-fix-support-for-rootfstype-when-root-is-given.patch @@ -0,0 +1,70 @@ +From 21528c69a0d8483f7c6345b1a0bc8d8975e9a172 Mon Sep 17 00:00:00 2001 +From: Stefan Berger +Date: Sun, 19 Nov 2023 20:12:48 -0500 +Subject: rootfs: Fix support for rootfstype= when root= is given + +From: Stefan Berger + +commit 21528c69a0d8483f7c6345b1a0bc8d8975e9a172 upstream. + +Documentation/filesystems/ramfs-rootfs-initramfs.rst states: + + If CONFIG_TMPFS is enabled, rootfs will use tmpfs instead of ramfs by + default. To force ramfs, add "rootfstype=ramfs" to the kernel command + line. + +This currently does not work when root= is provided since then +saved_root_name contains a string and rootfstype= is ignored. Therefore, +ramfs is currently always chosen when root= is provided. + +The current behavior for rootfs's filesystem is: + + root= | rootfstype= | chosen rootfs filesystem + ------------+-------------+-------------------------- + unspecified | unspecified | tmpfs + unspecified | tmpfs | tmpfs + unspecified | ramfs | ramfs + provided | ignored | ramfs + +rootfstype= should be respected regardless whether root= is given, +as shown below: + + root= | rootfstype= | chosen rootfs filesystem + ------------+-------------+-------------------------- + unspecified | unspecified | tmpfs (as before) + unspecified | tmpfs | tmpfs (as before) + unspecified | ramfs | ramfs (as before) + provided | unspecified | ramfs (compatibility with before) + provided | tmpfs | tmpfs (new) + provided | ramfs | ramfs (new) + +This table represents the new behavior. + +Fixes: 6e19eded3684 ("initmpfs: use initramfs if rootfstype= or root= specified") +Cc: +Signed-off-by: Rob Landley +Link: https://lore.kernel.org/lkml/8244c75f-445e-b15b-9dbf-266e7ca666e2@landley.net/ +Reviewed-and-Tested-by: Mimi Zohar +Signed-off-by: Stefan Berger +Link: https://lore.kernel.org/r/20231120011248.396012-1-stefanb@linux.ibm.com +Signed-off-by: Greg Kroah-Hartman +--- + init/do_mounts.c | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +--- a/init/do_mounts.c ++++ b/init/do_mounts.c +@@ -643,7 +643,10 @@ struct file_system_type rootfs_fs_type = + + void __init init_rootfs(void) + { +- if (IS_ENABLED(CONFIG_TMPFS) && !saved_root_name[0] && +- (!root_fs_names || strstr(root_fs_names, "tmpfs"))) +- is_tmpfs = true; ++ if (IS_ENABLED(CONFIG_TMPFS)) { ++ if (!saved_root_name[0] && !root_fs_names) ++ is_tmpfs = true; ++ else if (root_fs_names && !!strstr(root_fs_names, "tmpfs")) ++ is_tmpfs = true; ++ } + } diff --git a/queue-5.4/series b/queue-5.4/series index 1e7f357c4bc..05c8cb245d3 100644 --- a/queue-5.4/series +++ b/queue-5.4/series @@ -153,4 +153,6 @@ revert-usb-typec-class-fix-typec_altmode_put_partner-to-put-plugs.patch usb-typec-class-fix-typec_altmode_put_partner-to-put-plugs.patch usb-mon-fix-atomicity-violation-in-mon_bin_vma_fault.patch alsa-oxygen-fix-right-channel-of-capture-volume-mixer.patch +fbdev-flush-deferred-work-in-fb_deferred_io_fsync.patch +rootfs-fix-support-for-rootfstype-when-root-is-given.patch net-ethernet-mtk_eth_soc-remove-duplicate-if-statements.patch -- 2.47.3