]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
5.15-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 30 Mar 2026 06:01:29 +0000 (08:01 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 30 Mar 2026 06:01:29 +0000 (08:01 +0200)
added patches:
erofs-add-gfp_noio-in-the-bio-completion-if-needed.patch

queue-5.15/erofs-add-gfp_noio-in-the-bio-completion-if-needed.patch [new file with mode: 0644]
queue-5.15/series

diff --git a/queue-5.15/erofs-add-gfp_noio-in-the-bio-completion-if-needed.patch b/queue-5.15/erofs-add-gfp_noio-in-the-bio-completion-if-needed.patch
new file mode 100644 (file)
index 0000000..7686da1
--- /dev/null
@@ -0,0 +1,62 @@
+From c23df30915f83e7257c8625b690a1cece94142a0 Mon Sep 17 00:00:00 2001
+From: Jiucheng Xu <jiucheng.xu@amlogic.com>
+Date: Wed, 11 Mar 2026 17:11:31 +0800
+Subject: erofs: add GFP_NOIO in the bio completion if needed
+
+From: Jiucheng Xu <jiucheng.xu@amlogic.com>
+
+commit c23df30915f83e7257c8625b690a1cece94142a0 upstream.
+
+The bio completion path in the process context (e.g. dm-verity)
+will directly call into decompression rather than trigger another
+workqueue context for minimal scheduling latencies, which can
+then call vm_map_ram() with GFP_KERNEL.
+
+Due to insufficient memory, vm_map_ram() may generate memory
+swapping I/O, which can cause submit_bio_wait to deadlock
+in some scenarios.
+
+Trimmed down the call stack, as follows:
+
+f2fs_submit_read_io
+  submit_bio                      //bio_list is initialized.
+    mmc_blk_mq_recovery
+      z_erofs_endio
+        vm_map_ram
+          __pte_alloc_kernel
+            __alloc_pages_direct_reclaim
+              shrink_folio_list
+                __swap_writepage
+                  submit_bio_wait  //bio_list is non-NULL, hang!!!
+
+Use memalloc_noio_{save,restore}() to wrap up this path.
+
+Reviewed-by: Gao Xiang <hsiangkao@linux.alibaba.com>
+Signed-off-by: Jiucheng Xu <jiucheng.xu@amlogic.com>
+Reviewed-by: Chao Yu <chao@kernel.org>
+Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ fs/erofs/zdata.c |    3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/fs/erofs/zdata.c
++++ b/fs/erofs/zdata.c
+@@ -782,6 +782,7 @@ static void z_erofs_decompress_kickoff(s
+                                      bool sync, int bios)
+ {
+       struct erofs_sb_info *const sbi = EROFS_SB(io->sb);
++      int gfp_flag;
+       /* wake up the caller thread for sync decompression */
+       if (sync) {
+@@ -802,7 +803,9 @@ static void z_erofs_decompress_kickoff(s
+               sbi->opt.readahead_sync_decompress = true;
+               return;
+       }
++      gfp_flag = memalloc_noio_save();
+       z_erofs_decompressqueue_work(&io->u.work);
++      memalloc_noio_restore(gfp_flag);
+ }
+ static bool z_erofs_page_is_invalidated(struct page *page)
index 31b4559e3da5cb26fdf5acf30792f1c524b84307..dce77962d5ff24293dc0bf78ae5603a043de118e 100644 (file)
@@ -372,3 +372,4 @@ cpufreq-conservative-reset-requested_freq-on-limits-change.patch
 kvm-arm64-discard-pc-update-state-on-vcpu-reset.patch
 media-mc-v4l2-serialize-reinit-and-reqbufs-with-req_queue_mutex.patch
 virtio_net-fix-uaf-on-dst_ops-when-iff_xmit_dst_release-is-cleared-and-napi_tx-is-false.patch
+erofs-add-gfp_noio-in-the-bio-completion-if-needed.patch