drivers/block/zram/zram_drv.c | 1 + 1 file changed, 1 insertion(+)
The page allocation with GFP_NOIO may fail. And zram can handle this
allocation failure. We do not need to print log for this.
Actually warn_alloc was more restricted by commit 1be334e5c088
("mm/page_alloc.c: ratelimit allocation failure warnings more
aggressively"). To catch other allocation failure, zram can use
__GFP_NOWARN.
This is what I got.
kswapd0: page allocation failure: order:0, mode:0x140000a(GFP_NOIO|__GFP_HIGHMEM|__GFP_MOVABLE), nodemask=(null)
kswapd0 cpuset=/ mems_allowed=0
Call trace:
dump_backtrace+0x0/0x218
show_stack+0x14/0x1c
dump_stack+0xb8/0xf0
warn_alloc+0x110/0x234
__alloc_pages_nodemask+0x11c0/0x12a0
zs_malloc+0x1ac/0x50c
zram_bvec_rw+0x1a4/0x6a8
zram_make_request+0x23c/0x328
generic_make_request+0xe4/0x270
submit_bio+0x64/0x2a8
__swap_writepage+0x3a8/0x404
swap_writepage+0x40/0x4c
shrink_page_list.llvm.15153564514306699876+0xffc/0x13a0
shrink_inactive_list+0x2dc/0x710
shrink_node_memcg+0x394/0x940
shrink_node+0x194/0x380
Signed-off-by: Jaewon Kim <jaewon31.kim@samsung.com>
---
drivers/block/zram/zram_drv.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c
index e9474b02012d..c22201da25bb 100644
--- a/drivers/block/zram/zram_drv.c
+++ b/drivers/block/zram/zram_drv.c
@@ -1405,6 +1405,7 @@ static int __zram_bvec_write(struct zram *zram, struct bio_vec *bvec,
atomic64_inc(&zram->stats.writestall);
handle = zs_malloc(zram->mem_pool, comp_len,
GFP_NOIO | __GFP_HIGHMEM |
+ __GFP_NOWARN |
__GFP_MOVABLE);
if (handle)
goto compress_again;
--
2.17.1
On Wed 30-03-22 14:25:02, Jaewon Kim wrote: > The page allocation with GFP_NOIO may fail. And zram can handle this > allocation failure. We do not need to print log for this. GFP_NOIO doesn't have any special meaning wrt to failures. zram allocates from the memory reclaim context which is a bad design IMHO. The failure you are seeing indicates that PF_MEMALLOC context (memory reclaim) which is allow to dip into memory reserves without any limit cannot find any memory! This is really bad and it is good to learn about that. Your description doesn't really explain why we should be ignoring that situation. Is the memory allocation failure gracefully recoverable? -- Michal Hocko SUSE Labs
On (22/03/30 10:06), Michal Hocko wrote: > On Wed 30-03-22 14:25:02, Jaewon Kim wrote: > > The page allocation with GFP_NOIO may fail. And zram can handle this > > allocation failure. We do not need to print log for this. > > GFP_NOIO doesn't have any special meaning wrt to failures. zram > allocates from the memory reclaim context which is a bad design IMHO. Agreed. > Is the memory allocation failure gracefully recoverable? No, it's not. I agree that we want to see that allocation warning in the logs.
On Wed 30-03-22 10:06:18, Michal Hocko wrote: > On Wed 30-03-22 14:25:02, Jaewon Kim wrote: > > The page allocation with GFP_NOIO may fail. And zram can handle this > > allocation failure. We do not need to print log for this. > > GFP_NOIO doesn't have any special meaning wrt to failures. zram > allocates from the memory reclaim context which is a bad design IMHO. Btw. I forgot to mention that GFP_NOIO doesn't have any different meaning than GFP_KERNEL from this (PF_MEMALLOC) allocation context because this request will never perform a reclaim. -- Michal Hocko SUSE Labs
2022년 3월 30일 (수) 오후 5:49, Michal Hocko <mhocko@suse.com>님이 작성: > > On Wed 30-03-22 10:06:18, Michal Hocko wrote: > > On Wed 30-03-22 14:25:02, Jaewon Kim wrote: > > > The page allocation with GFP_NOIO may fail. And zram can handle this > > > allocation failure. We do not need to print log for this. > > > > GFP_NOIO doesn't have any special meaning wrt to failures. zram > > allocates from the memory reclaim context which is a bad design IMHO. > > Btw. I forgot to mention that GFP_NOIO doesn't have any different > meaning than GFP_KERNEL from this (PF_MEMALLOC) allocation context > because this request will never perform a reclaim. Thank you for reply Yes it was kswapd with PF_MEMALLOC, but I thought this zs_malloc could fail on direct reclaim context. I think zram is gracefully handling this ENOMEM situation, it actually accounts the failed count as zram stats. The failed page will be tried to swap out again later. Yes I need to look into more about this memory shortage. But I thought there were too many ALLOC_HADER requests in a short time, and I want to see other allocation failure logs like one with GFP_ATOMIC instead of this zs_malloc failure log. > -- > Michal Hocko > SUSE Labs
© 2016 - 2026 Red Hat, Inc.