Skip to content

Commit 3b15f9d

Browse files
onlyoneofmeakpm00
authored andcommitted
mm/damon/core: fix return value from damos_wmark_metric_value
damos_wmark_metric_value's return value is 'unsigned long', so returning -EINVAL as 'unsigned long' may turn out to be very different from the expected one (using 2's complement) and treat as usual matric's value. So, fix that, checking if returned value is not 0. Link: https://lkml.kernel.org/r/20240506180238.53842-1-sj@kernel.org Fixes: ee801b7 ("mm/damon/schemes: activate schemes based on a watermarks mechanism") Signed-off-by: Alex Rusuf <yorha.op@gmail.com> Reviewed-by: SeongJae Park <sj@kernel.org> Signed-off-by: SeongJae Park <sj@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
1 parent 4f68728 commit 3b15f9d

File tree

1 file changed

+5
-4
lines changed

1 file changed

+5
-4
lines changed

mm/damon/core.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1481,12 +1481,14 @@ static bool kdamond_need_stop(struct damon_ctx *ctx)
14811481
return true;
14821482
}
14831483

1484-
static unsigned long damos_wmark_metric_value(enum damos_wmark_metric metric)
1484+
static int damos_get_wmark_metric_value(enum damos_wmark_metric metric,
1485+
unsigned long *metric_value)
14851486
{
14861487
switch (metric) {
14871488
case DAMOS_WMARK_FREE_MEM_RATE:
1488-
return global_zone_page_state(NR_FREE_PAGES) * 1000 /
1489+
*metric_value = global_zone_page_state(NR_FREE_PAGES) * 1000 /
14891490
totalram_pages();
1491+
return 0;
14901492
default:
14911493
break;
14921494
}
@@ -1501,10 +1503,9 @@ static unsigned long damos_wmark_wait_us(struct damos *scheme)
15011503
{
15021504
unsigned long metric;
15031505

1504-
if (scheme->wmarks.metric == DAMOS_WMARK_NONE)
1506+
if (damos_get_wmark_metric_value(scheme->wmarks.metric, &metric))
15051507
return 0;
15061508

1507-
metric = damos_wmark_metric_value(scheme->wmarks.metric);
15081509
/* higher than high watermark or lower than low watermark */
15091510
if (metric > scheme->wmarks.high || scheme->wmarks.low > metric) {
15101511
if (scheme->wmarks.activated)

0 commit comments

Comments
 (0)