[PATCH 0/4] drbd: switch from genl_magic to YNL

Christoph Böhmwalder
2026-04-07T17:34:11Z

DRBD's genetlink interface was defined using a custom multi-include
macro system, genl_magic_{func,struct}.h. This system generated struct
definitions, netlink policies, serialization functions and more
from a single "magic" header.
It never really caught on; DRBD is its only user, its internal macro
jungle is next to impossible to understand, and even harder to debug.

This series replaces it with the standard solution, YNL.

First, shuffle some headers around because the YNL generator expects
to generate UAPI headers.
Then, add some optional extensions to the YNL generator to support a
minimal set of old genl_magic features required for backward
compatibility.
Then create a "genetlink-legacy" based spec for DRBD and switch to it.

Note: this family primarily aims for compatiblity with existing
userspace. The next planned step is a new (also YNL-based) family,
"drbd2", which will implement all the actual modern recommendations for
new netlink families.

Christoph Böhmwalder (4):
drbd: move UAPI headers to include/uapi/linux/
tools: ynl-gen-c: optionally emit structs and helpers
drbd: add YNL genetlink specification
drbd: switch from genl_magic macros to YNL-generated code

Documentation/netlink/genetlink-legacy.yaml | 23 +
Documentation/netlink/specs/drbd.yaml | 1109 +++++++
drivers/block/drbd/Makefile | 1 +
drivers/block/drbd/drbd_buildtag.c | 2 +-
.../block/drbd}/drbd_config.h | 0
drivers/block/drbd/drbd_debugfs.c | 2 +-
drivers/block/drbd/drbd_int.h | 6 +-
drivers/block/drbd/drbd_main.c | 6 +-
drivers/block/drbd/drbd_nl.c | 416 +--
drivers/block/drbd/drbd_nl_gen.c | 2610 +++++++++++++++++
drivers/block/drbd/drbd_nl_gen.h | 399 +++
drivers/block/drbd/drbd_proc.c | 2 +-
include/linux/drbd_genl.h | 536 ----
include/linux/drbd_genl_api.h | 56 -
include/linux/genl_magic_func.h | 413 ---
include/linux/genl_magic_struct.h | 272 --
include/{ => uapi}/linux/drbd.h | 45 +-
include/uapi/linux/drbd_genl.h | 363 +++
include/{ => uapi}/linux/drbd_limits.h | 2 +-
tools/net/ynl/pyynl/ynl_gen_c.py | 293 +-
20 files changed, 5087 insertions(+), 1469 deletions(-)
create mode 100644 Documentation/netlink/specs/drbd.yaml
rename {include/linux => drivers/block/drbd}/drbd_config.h (100%)
create mode 100644 drivers/block/drbd/drbd_nl_gen.c
create mode 100644 drivers/block/drbd/drbd_nl_gen.h
delete mode 100644 include/linux/drbd_genl.h
delete mode 100644 include/linux/drbd_genl_api.h
delete mode 100644 include/linux/genl_magic_func.h
delete mode 100644 include/linux/genl_magic_struct.h
rename include/{ => uapi}/linux/drbd.h (86%)
create mode 100644 include/uapi/linux/drbd_genl.h
rename include/{ => uapi}/linux/drbd_limits.h (99%)

base-commit: a9c4b1d37622ed01b75f94a4f68cf55f33153a31
--
2.53.0