The 'enabled' will be incorrectly set because the 'system_wq' might not initialized yet. This results in 'enabled=true', but the 'damon_reclaim_timer' is inactive. So fix it by moving the judgment logic of the 'damon_reclaim_initialized' to the start position of the enable_store(). Fixes: 294928293813 ("mm/damon/reclaim: schedule 'damon_reclaim_timer' only after 'system_wq' is initialized") Signed-off-by: Yuanzheng Song <songyuanzheng@xxxxxxxxxx> --- mm/damon/reclaim.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/mm/damon/reclaim.c b/mm/damon/reclaim.c index e69b807fefe4..b13d5a02bf2e 100644 --- a/mm/damon/reclaim.c +++ b/mm/damon/reclaim.c @@ -374,13 +374,14 @@ static bool damon_reclaim_initialized; static int damon_reclaim_enabled_store(const char *val, const struct kernel_param *kp) { - int rc = param_set_bool(val, kp); - - if (rc < 0) - return rc; + int rc; /* system_wq might not initialized yet */ if (!damon_reclaim_initialized) + return -EINVAL; + + rc = param_set_bool(val, kp); + if (rc < 0) return rc; schedule_delayed_work(&damon_reclaim_timer, 0); -- 2.25.1