From nobody Wed Apr 15 16:02:28 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7F19530ACF0 for ; Wed, 4 Mar 2026 07:28:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772609290; cv=none; b=mGyKxaieAUc9HGTJpkmeEfBxtf8b56I1o3nEw71ceVBKXxiJ/Ffi2OmSwmY6sA69VKT/EWniaqr+6reD2hyTL3TuADjRMAaoXEHm9fqOZlZwriclZoyTwO4qyqY9IpT8AWIVax7jOiZyBrfI98oVQLy2nLfIGHYymxS5ns5l1h8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772609290; c=relaxed/simple; bh=X9lIunOrna/iIZwoPlS1GBm2SgOAKz0WSDrE8Dnqyms=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc; b=SjNpIYhoT/yqw/uZVm6lJ+S1GMQiLJ/LEc3XSMfwaOtQbDupD203RsedZATvK7piRXphlnAV7nJnS9ksz6Spdlha6xrbQULMGB+78ELuBf7JrB6MORiVs+jkdzeo616g1oo6E0JNg/GlqxnP9lzdtC5jSj6KxkeS+UAG9ST5Xl0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Mj4r4Azp; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Mj4r4Azp" Received: by smtp.kernel.org (Postfix) with ESMTPS id 09779C19423; Wed, 4 Mar 2026 07:28:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1772609290; bh=X9lIunOrna/iIZwoPlS1GBm2SgOAKz0WSDrE8Dnqyms=; h=From:Date:Subject:To:Cc:Reply-To:From; b=Mj4r4AzpuiAjxRfG5N+kpumkKOANltMWs9HMI6BRKe0v4zOi2Qyk00Z0jCi0HY0cV LAxnzJd1grHLHMS+sCBIx4S8QfJ5de7AQ7jBDqHkW7sLaw5Kv5oydFz5GkYjuftu1P vmhKROvK2RMN0rpSIpgskPlaD/uL5akQxJaYXWlp6oiNVGv5lalVHxNlKO1toHLDCJ oFDDadnrw2qIm49xSBxeYU4nYbUNaiYZ4/NK1Z6fVPbj4pupmWg0w4/CJAhSNgFw6K tKRrucFZnMgFKpBfVrSHtAoGHYcOSP6F/ZWKgt75GQngdaHwkGajwC28eNigeVslt+ kb5yMsk5P1abQ== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id EB8F2EDEC1B; Wed, 4 Mar 2026 07:28:09 +0000 (UTC) From: Maximilian Pezzullo via B4 Relay Date: Wed, 04 Mar 2026 08:27:38 +0100 Subject: [PATCH] mm/vmstat: reject zero vm.stat_interval to prevent busy-loop Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260304-mm-vmstat-reject-zero-vm-stat_interval-to-prevent-busy-loop-v1-1-c03c9555ff15@gmail.com> X-B4-Tracking: v=1; b=H4sIAAAAAAAC/x2N0QrCMAxFf2Xk2cCs3QR/RUSyGTWytqONRR37d 6OP53C5Z4HCWbjAoVkgc5UiKRpsNw2Md4o3RrkYg2td3+5ajyFgDUVJMfODR8UP52QKf+4sUTl XmlATzvbHUXF4ljdOKc04UOd9T53bE4EVbHGV179+PK3rF2FrJJaNAAAA X-Change-ID: 20260304-mm-vmstat-reject-zero-vm-stat_interval-to-prevent-busy-loop-ba5446a527aa To: Andrew Morton , David Hildenbrand , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Terry M , Maximilian Pezzullo X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1772609289; l=1836; i=maximilianpezzullo@gmail.com; s=20260303; h=from:subject:message-id; bh=qPVkk+RjNot6d1aWiuzGeSKqQMeQqa4dNJWr0ISRIT8=; b=8fIpGxrHPIjYGDUNowEueBvSdu3/qSDNnV63gL4/GDUISpQasaYU5bPCTo9KPkXdNirrDWSy9 6SqTQxrYgilAzGICa/sFavlePMaT9YGB/y/IPJL6frSt1jLWjtDo1ar X-Developer-Key: i=maximilianpezzullo@gmail.com; a=ed25519; pk=TRTR4c2Vb1IfluQvv5OUDPg7EE+pIzdPBND85UU559w= X-Endpoint-Received: by B4 Relay for maximilianpezzullo@gmail.com/20260303 with auth_id=658 X-Original-From: Maximilian Pezzullo Reply-To: maximilianpezzullo@gmail.com From: Maximilian Pezzullo Setting vm.stat_interval to 0 causes excessive kworker CPU usage because vmstat_shepherd() and vmstat_update() reschedule themselves with round_jiffies_relative(0), which resolves to an immediate reschedule and creates a busy-loop. Add a custom sysctl handler that rejects 0 and restores the previous value, similar to how dirtytime_interval_handler() handles vm.dirtytime_expire_seconds. Reported-by: Terry M Closes: https://bugzilla.kernel.org/show_bug.cgi?id=3D220226 Signed-off-by: Maximilian Pezzullo --- mm/vmstat.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/mm/vmstat.c b/mm/vmstat.c index 86b14b0f77b5..6eeb4341b215 100644 --- a/mm/vmstat.c +++ b/mm/vmstat.c @@ -2114,6 +2114,18 @@ void vmstat_flush_workqueue(void) flush_workqueue(mm_percpu_wq); } =20 +static int vmstat_interval_handler(const struct ctl_table *table, int writ= e, + void *buffer, size_t *lenp, loff_t *ppos) +{ + int ret =3D proc_dointvec_jiffies(table, write, buffer, lenp, ppos); + + if (ret =3D=3D 0 && write && sysctl_stat_interval =3D=3D 0) { + sysctl_stat_interval =3D HZ; + return -EINVAL; + } + return ret; +} + static void vmstat_shepherd(struct work_struct *w) { int cpu; @@ -2236,7 +2248,7 @@ static const struct ctl_table vmstat_table[] =3D { .data =3D &sysctl_stat_interval, .maxlen =3D sizeof(sysctl_stat_interval), .mode =3D 0644, - .proc_handler =3D proc_dointvec_jiffies, + .proc_handler =3D vmstat_interval_handler, }, { .procname =3D "stat_refresh", --- base-commit: af4e9ef3d78420feb8fe58cd9a1ab80c501b3c08 change-id: 20260304-mm-vmstat-reject-zero-vm-stat_interval-to-prevent-busy-= loop-ba5446a527aa Best regards, --=20 Maximilian Pezzullo