* [PATCH 1/1] Restore swap_space attr aviod krn panic
@ 2026-01-15 0:13 robin.kuo
2026-01-15 1:27 ` Andrew Morton
0 siblings, 1 reply; 2+ messages in thread
From: robin.kuo @ 2026-01-15 0:13 UTC (permalink / raw)
To: robin.kuo, Andrew Morton, Chris Li, Kairui Song, Kemeng Shi,
Nhat Pham, Baoquan He, Barry Song, Matthias Brugger,
AngeloGioacchino Del Regno
Cc: wsd_upstream, casper.li, chinwen.chang, Andrew.Yang, Qun-wei.Lin,
oliver.sang, linux-mm, linux-kernel, linux-arm-kernel,
linux-mediatek
From: "robin.kuo" <robin.kuo@mediatek.com>
Restore swap_space attr avoid krn panic
Commit 8b47299a411a ('mm, swap: mark swap address space ro and add
context debug check') made the swap address space read-only.
It may lead to kernel panic if arch_prepare_to_swap returns a failure
under heavy memory pressure as follows,
el1_abort+0x40/0x64
el1h_64_sync_handler+0x48/0xcc
el1h_64_sync+0x84/0x88
errseq_set+0x4c/0xb8 (P)
__filemap_set_wb_err+0x20/0xd0
shrink_folio_list+0xc20/0x11cc
evict_folios+0x1520/0x1be4
try_to_shrink_lruvec+0x27c/0x3dc
shrink_one+0x9c/0x228
shrink_node+0xb3c/0xeac
do_try_to_free_pages+0x170/0x4f0
try_to_free_pages+0x334/0x534
__alloc_pages_direct_reclaim+0x90/0x158
__alloc_pages_slowpath+0x334/0x588
__alloc_frozen_pages_noprof+0x224/0x2fc
__folio_alloc_noprof+0x14/0x64
vma_alloc_zeroed_movable_folio+0x34/0x44
do_pte_missing+0xad4/0x1040
handle_mm_fault+0x4a4/0x790
do_page_fault+0x288/0x5f8
do_translation_fault+0x38/0x54
do_mem_abort+0x54/0xa8
Restore swap address space as not ro to avoid the panic.
Signed-off-by: robin.kuo <robin.kuo@mediatek.com>
---
mm/swap.h | 2 +-
mm/swap_state.c | 3 +--
2 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/mm/swap.h b/mm/swap.h
index d034c13d8dd2..1bd466da3039 100644
--- a/mm/swap.h
+++ b/mm/swap.h
@@ -198,7 +198,7 @@ int swap_writeout(struct folio *folio, struct swap_iocb **swap_plug);
void __swap_writepage(struct folio *folio, struct swap_iocb **swap_plug);
/* linux/mm/swap_state.c */
-extern struct address_space swap_space __ro_after_init;
+extern struct address_space swap_space __read_mostly;
static inline struct address_space *swap_address_space(swp_entry_t entry)
{
return &swap_space;
diff --git a/mm/swap_state.c b/mm/swap_state.c
index 5f97c6ae70a2..44d228982521 100644
--- a/mm/swap_state.c
+++ b/mm/swap_state.c
@@ -37,8 +37,7 @@ static const struct address_space_operations swap_aops = {
#endif
};
-/* Set swap_space as read only as swap cache is handled by swap table */
-struct address_space swap_space __ro_after_init = {
+struct address_space swap_space __read_mostly = {
.a_ops = &swap_aops,
};
--
2.45.2
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH 1/1] Restore swap_space attr aviod krn panic
2026-01-15 0:13 [PATCH 1/1] Restore swap_space attr aviod krn panic robin.kuo
@ 2026-01-15 1:27 ` Andrew Morton
0 siblings, 0 replies; 2+ messages in thread
From: Andrew Morton @ 2026-01-15 1:27 UTC (permalink / raw)
To: robin.kuo
Cc: Chris Li, Kairui Song, Kemeng Shi, Nhat Pham, Baoquan He,
Barry Song, Matthias Brugger, AngeloGioacchino Del Regno,
wsd_upstream, casper.li, chinwen.chang, Andrew.Yang, Qun-wei.Lin,
oliver.sang, linux-mm, linux-kernel, linux-arm-kernel,
linux-mediatek
On Thu, 15 Jan 2026 08:13:43 +0800 <robin.kuo@mediatek.com> wrote:
> From: "robin.kuo" <robin.kuo@mediatek.com>
>
> Restore swap_space attr avoid krn panic
Thanks, and welcome to Linux ;)
> Commit 8b47299a411a ('mm, swap: mark swap address space ro and add
> context debug check') made the swap address space read-only.
> It may lead to kernel panic if arch_prepare_to_swap returns a failure
> under heavy memory pressure as follows,
>
> el1_abort+0x40/0x64
> el1h_64_sync_handler+0x48/0xcc
> el1h_64_sync+0x84/0x88
> errseq_set+0x4c/0xb8 (P)
> __filemap_set_wb_err+0x20/0xd0
> shrink_folio_list+0xc20/0x11cc
> evict_folios+0x1520/0x1be4
> try_to_shrink_lruvec+0x27c/0x3dc
> shrink_one+0x9c/0x228
> shrink_node+0xb3c/0xeac
> do_try_to_free_pages+0x170/0x4f0
> try_to_free_pages+0x334/0x534
> __alloc_pages_direct_reclaim+0x90/0x158
> __alloc_pages_slowpath+0x334/0x588
> __alloc_frozen_pages_noprof+0x224/0x2fc
> __folio_alloc_noprof+0x14/0x64
> vma_alloc_zeroed_movable_folio+0x34/0x44
> do_pte_missing+0xad4/0x1040
> handle_mm_fault+0x4a4/0x790
> do_page_fault+0x288/0x5f8
> do_translation_fault+0x38/0x54
> do_mem_abort+0x54/0xa8
>
> Restore swap address space as not ro to avoid the panic.
Well damn. We have checking tools which should be able to detect this:
we referenced something which was dropped from kernel memory in the
calling function's context. i don't know who I should report this to.
I shall add cc:stable to this patch, to help ensure that it is
backported into 6.18.x.
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-01-15 1:27 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-01-15 0:13 [PATCH 1/1] Restore swap_space attr aviod krn panic robin.kuo
2026-01-15 1:27 ` Andrew Morton
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox