Re: [RFC PATCH v5 0/2] sysctl: add CTLTBL_ENTRY_XXX() macros for ctl_table initialization

From: Wen Yang

Date: Sat Oct 24 2026 - 12:45:55 EST




On 6/17/26 23:25, Joel Granados wrote:
Hey Wen

Sorry for not getting back to you sooner.

IMO, this is approach is the way to go to bring back the control of the
sysctl variables into the sysctl subsys files. Would like to get another
set of eyes on it before committing to it though.

I think it has not gotten too much attention because it does not touch
any other subsystem. Would you consider adding one subsys to the series?
Something like implementing it for the users in arch/ or fs/ or
drivers/.

Also, this might be a signal to park this temporarily and let it simmer
until more ppl are annoyed at making changes to the sysctl API.

Best


Hi Joel,

Apologies for the long delay, and thank you for your helpful feedback.
I've been tied up with other commitments, but can now return to this
work and prepare v3 based on your suggestions.


Given the time that has passed, I'd appreciate any updated advice or
related developments I should take into account.


Thanks again for your time and patience.

--

Best regards, Wen

On Sat, Jun 13, 2026 at 11:56:50PM +0800, Wen Yang wrote:
Hi Kees, H jioel,

Gentle ping on this series. Please let me know if there are any
concerns or if further changes are needed.

The series is available at:
https://lore.kernel.org/all/x5stdwwsfp2h22zyexn5ycbxnkyc4ioxscninxsa6q7lf6djqr@jkuppwwqubkp/

Thanks for your time,
Wen


On 3/26/26 02:39, wen.yang@xxxxxxxxx wrote:
From: Wen Yang <wen.yang@xxxxxxxxx>

Historically, changes to how struct ctl_table entries are initialized
(e.g. removing the child field, const-qualifying ctl_table) required
touching hundreds of files across all subsystems. Such series require
the attention of many maintainers, sometimes need to be pulled into
mainline in a special way, and create lots of unnecessary churn. With
CTLTBL_ENTRY_XXX(), future structural changes to struct ctl_table need
only update the macro definitions.

Conversion of existing call sites will proceed incrementally from
kernel/sysctl.c outward, rather than as a treewide sweep.

This series:
1. Introduces the CTLTBL_ENTRY_XXX() macros in include/linux/sysctl.h,
using _Generic() for automatic proc_handler selection, auto
address-of, auto maxlen via sizeof(), and compile-time validation.
Supported types: int, unsigned int, long, unsigned long, bool, u8.
2. Converts kernel/sysctl-test.c as a demonstration, adding a
parameterized KUnit test covering all macro variants (V, VM, VMR,
VN, VNM, VNMH) across int, u8, bool, and char[] types.

Based on discussion and suggestions from:
[1] https://sysctl-dev-rtd.readthedocs.io/en/latest/notes/ctltable_entry_macro.html
[2] https://lore.kernel.org/all/psot4oeauxi3yyj2w4ajm3tfgtcsvao4rhv5sgd5s6ymmjgojk@p3vrj3qluban/

---
Changes in v5:
- Extend __CTL_AUTO_HANDLER to support bool and u8
- Replace individual test functions with a single parameterized KUnit
test (KUNIT_CASE_PARAM) covering all variants and types
- Use struct ctl_table as the expected-value container in the param
struct, eliminating custom expected_* fields

Changes in v4:
- Fix Wpointer-type-mismatch warnings detected by lkp:
https://lore.kernel.org/oe-kbuild-all/202603050724.SZxrEyyu-lkp@xxxxxxxxx/

Changes in v3:
- Replace the unique macro with "capital letter approach"
- Reduce the name further
https://lore.kernel.org/all/rn4rsazh7kxf5byq65vw2phyqgzvwm3scczu3l5h2r4aqit2r6@znlpb24z2zuo/

Changes in v2:
- Add lvalue check, handler type check, etc.
https://lore.kernel.org/all/xptwb3uwbzposd4xf7khj52ifv4tchcjdgllhv7aabi6d7wgef@2msurl564v53/


Wen Yang (2):
sysctl: introduce CTLTBL_ENTRY_XXX() helper macros
sysctl: convert kernel/sysctl-test.c to use CTLTBL_ENTRY_XXX()

include/linux/sysctl.h | 307 +++++++++++++++++++++++++++++++++++++++++
kernel/sysctl-test.c | 237 ++++++++++++++++++-------------
kernel/sysctl.c | 2 +
3 files changed, 447 insertions(+), 99 deletions(-)