From: SJ Park <sj@kernel.org>
Cc: SJ Park <sj@kernel.org>,
stable@vger.kernel.org, Andrew Morton <akpm@linux-foundation.org>,
damon@lists.linux.dev, linux-kernel@vger.kernel.org,
linux-mm@kvack.org
Subject: [RFC PATCH v1.2 6/8] mm/damon/core: handle extreme memory state in damon_get_node_mem_bp()
Date: Mon, 31 Aug 2026 07:02:45 -0700 [thread overview]
Message-ID: <20260831140254.72004-7-sj@kernel.org> (raw)
In-Reply-To: <20260831140254.72004-1-sj@kernel.org>
In an extreme and unlikely situation, si_meminfo_node() might let the
caller show zero total ram. That could cause a divide by zero in
damon_get_node_mem_bp(). It could also show free memory larger than the
total memory. This could cause underflow and make DAMOS temporarily
make unexpected behavior. Thanks to safety guards in the auto-tuning
feedback loop, that should not be a real problem, though. Fix the
problems by respectively returning 100% and 0% for used and free memory
queries in the corner cases.
The issue was discovered [1] by Sashiko.
[1] https://lore.kernel.org/20260328133216.9697-1-sj@kernel.org
Fixes: 0e1c773b501f ("mm/damon/core: introduce damos quota goal metrics for memory node utilization")
Cc: <stable@vger.kernel.org> # 6.16.x
Signed-off-by: SJ Park <sj@kernel.org>
---
mm/damon/core.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/mm/damon/core.c b/mm/damon/core.c
index e2900d0c984c9..75d71ac09515e 100644
--- a/mm/damon/core.c
+++ b/mm/damon/core.c
@@ -2816,6 +2816,13 @@ static __kernel_ulong_t damos_get_node_mem_bp(
}
si_meminfo_node(&i, goal->nid);
+ if (!i.totalram || i.totalram < i.freeram) {
+ if (goal->metric == DAMOS_QUOTA_NODE_MEM_USED_BP)
+ return 10000;
+ else /* DAMOS_QUOTA_NODE_MEM_FREE_BP */
+ return 0;
+ }
+
if (goal->metric == DAMOS_QUOTA_NODE_MEM_USED_BP)
numerator = i.totalram - i.freeram;
else /* DAMOS_QUOTA_NODE_MEM_FREE_BP */
--
2.47.3
next prev parent reply other threads:[~2026-08-31 14:03 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-31 14:02 [RFC PATCH v1.2 0/8] mm/damon: fix DAMOS bugs in core, paddr and vaddr SJ Park
2026-08-31 14:02 ` [RFC PATCH v1.2 1/8] mm/damon/core: skip applying scheme if region split for quota fails SJ Park
2026-08-31 17:45 ` sashiko-bot
2026-08-31 14:02 ` [RFC PATCH v1.2 2/8] mm/damon/paddr: respect folio end for DAMOS_STAT SJ Park
2026-08-31 17:54 ` sashiko-bot
2026-08-31 14:02 ` [RFC PATCH v1.2 3/8] mm/damon/paddr: respect folio end for DAMOS actions except STAT SJ Park
2026-08-31 18:06 ` sashiko-bot
2026-08-31 14:02 ` [RFC PATCH v1.2 4/8] mm/damon/vaddr: respect folio end for DAMOS_STAT SJ Park
2026-08-31 18:14 ` sashiko-bot
2026-08-31 14:02 ` [RFC PATCH v1.2 5/8] mm/damon/vaddr: respect folio end for DAMOS_MIGRATE_{HOT,COLD} SJ Park
2026-08-31 18:23 ` sashiko-bot
2026-08-31 14:02 ` SJ Park [this message]
2026-08-31 18:29 ` [RFC PATCH v1.2 6/8] mm/damon/core: handle extreme memory state in damon_get_node_mem_bp() sashiko-bot
2026-08-31 14:02 ` [RFC PATCH v1.2 7/8] mm/damon/core: handle extreme memory state in get_node_memcg_used_bp() SJ Park
2026-08-31 18:41 ` sashiko-bot
2026-09-01 0:36 ` SJ Park
2026-08-31 14:02 ` [RFC PATCH v1.2 8/8] mm/damon/core: handle extreme memory state in get_in_active_mem_bp() SJ Park
2026-08-31 18:49 ` sashiko-bot
2026-09-01 0:37 ` SJ Park
2026-09-01 0:50 ` [RFC PATCH v1.2 0/8] mm/damon: fix DAMOS bugs in core, paddr and vaddr SJ Park
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260831140254.72004-7-sj@kernel.org \
--to=sj@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=damon@lists.linux.dev \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.