mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 04:34:03 +02:00
mm/damon/lru_sort: skip damon_call() if ctx has not started
DAMON_LRU_SORT calls damon_call() for commit_inputs parameter user input
if the DAMON context is initialized. The context could be initialized,
but not yet successfully started. In the case, damon_call() could
indefinitely hang. Read the comment on damon_call() for more detail. Fix
the problem by memorizing if the DAMON context has ever successfully
started, and skip damon_call() if it has not.
This issue can easily be reproduced by writing Y to the commit_inputs
parameter file on a system that DAMON_LRU_SORT has not turned on before.
Link: https://lore.kernel.org/20260803134646.16640-3-sj@kernel.org
Fixes: de3c60e1c8 ("mm/damon: add synchronous commit for commit_inputs")
Signed-off-by: SJ Park <sj@kernel.org>
Cc: Liew Rui Yan <aethernet65535@gmail.com>
Cc: <stable@vger.kernel.org> # 7.2.x
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
b9b6bad94c
commit
0f18683103
|
|
@ -351,6 +351,8 @@ static int damon_lru_sort_commit_inputs_fn(void *arg)
|
|||
return damon_lru_sort_apply_parameters();
|
||||
}
|
||||
|
||||
static bool damon_lru_sort_damon_has_started;
|
||||
|
||||
static int damon_lru_sort_commit_inputs_store(const char *val,
|
||||
const struct kernel_param *kp)
|
||||
{
|
||||
|
|
@ -371,11 +373,8 @@ static int damon_lru_sort_commit_inputs_store(const char *val,
|
|||
if (!commit_inputs_request)
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* Skip damon_call() if ctx is not initialized to avoid
|
||||
* NULL pointer dereference.
|
||||
*/
|
||||
if (!ctx)
|
||||
/* Skip damon_call() if ctx has not successfully started. */
|
||||
if (!damon_lru_sort_damon_has_started)
|
||||
return -EINVAL;
|
||||
|
||||
err = damon_call(ctx, &control);
|
||||
|
|
@ -426,6 +425,8 @@ static int damon_lru_sort_turn(bool on)
|
|||
err = damon_start(&ctx, 1, true);
|
||||
if (err)
|
||||
return err;
|
||||
if (!damon_lru_sort_damon_has_started)
|
||||
damon_lru_sort_damon_has_started = true;
|
||||
return damon_call(ctx, &call_control);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user