[PATCH v2 00/20] drbd: DRBD 9 rework
From: Christoph Böhmwalder
Date: Tue Oct 06 2026 - 11:49:35 EST
As discussed (context: [0]), here is our DRBD 9 rework series, intended
for linux-next via for-7.x/drbd.
This replays about 10-15 years of active out-of-tree development work
[1], depending on your way of counting. The out-of-tree module has
severely diverged from the in-tree version over the years, which is
what we are aiming to fix now.
Hopefully that somewhat excuses (or at least explains) the massive
diffs -- we've tried to come up with a way to group the changes by
topic, but I realize it's still not exactly trivial to review.
We've been polishing this series for a while now, and we have taken
great care to make it as "upstream-presentable" as possible. That said,
there are still probably imperfections. It's a start -- feedback
welcome!
The netlink interface has been reworked so that userspace is not
broken: the existing "drbd" generic netlink family keeps being served
at version 1, and this series does not touch its generated
serialization or its UAPI header.
Every shipped drbd-utils release therefore keeps working against this
driver. DRBD 9's own utilities speak a new family, "drbd2", written as
a YNL specification under Documentation/netlink/specs/ and following
current genetlink conventions; its generated code is checked in as
usual. The driver registers both families and translates each onto the
same wire-neutral core, so the multi-peer administration model is only
reachable through drbd2, while version-1 clients see the single-peer
semantics they expect.
The RDMA and load-balancing TCP (lb-tcp) transports are not part of
this series; they will be submitted separately once they have had the
same treatment. The rdma_ctrl_rcvbuf_size
and rdma_ctrl_sndbuf_size net options do remain in the UAPI: they are
generic transport options that are interpreted by whichever transport is
in use, so there is no reason to remove and later re-add them.
The base for these patches is for-7.4/block, plus a set of preparation
patches that were sent earlier but have not yet been applied [2].
As discussed, the goal is to get this applied to a for-7.x/drbd branch
so it can land in linux-next via block-next. After letting it mature
in linux-next for a while, it should go in via the block tree.
Thanks,
Christoph
[0] https://lore.kernel.org/linux-next/899e0337-9642-4ca6-9050-aeab14fa22ef@xxxxxxxxx/
[1] https://github.com/LINBIT/drbd
[2] https://lore.kernel.org/linux-block/20260923140608.1116713-1-christoph.boehmwalder@xxxxxxxxxx/
Changes since v1:
- New modern YNL-based drbd2 netlink family
- Compat layer that serves the old drbd v1 netlink family for userspace
backward compatibility
- Dropped rdma and lb-tcp transports to reduce the diff size, these will
be sent later
- Incoroporated review feedback from the previous series
- Many checkpatch/style fixes
Christoph Böhmwalder (20):
drbd: mark as BROKEN during DRBD 9 rework
drbd: extend wire protocol definitions for DRBD 9
drbd: introduce DRBD 9 on-disk metadata format
drbd: add transport layer abstraction
drbd: add TCP transport implementation
drbd: add DAX/PMEM support for metadata access
drbd: add optional compatibility layer for DRBD 8.4
drbd: add application/resync IO synchronization documentation
drbd: rework sender for DRBD 9 multi-peer
drbd: replace per-device state model with multi-peer data structures
drbd: rewrite state machine for DRBD 9 multi-peer clusters
drbd: rework activity log and bitmap for multi-peer replication
drbd: rework request processing for DRBD 9 multi-peer IO
drbd: rework module core for DRBD 9 transport and multi-peer
drbd: rework receiver for DRBD 9 transport and multi-peer protocol
drbd: rework the netlink core for DRBD 9
drbd: serve the "drbd" genl family at version 1 for existing userspace
drbd: add the "drbd2" genl family
drbd: update monitoring interfaces for multi-peer topology
drbd: remove BROKEN for DRBD
.../application-resync-synchronization.rst | 208 +
.../admin-guide/blockdev/drbd/index.rst | 1 +
Documentation/netlink/specs/drbd2.yaml | 2476 +++
drivers/block/drbd/Kconfig | 43 +
drivers/block/drbd/Makefile | 9 +-
drivers/block/drbd/drbd2_nl_gen.c | 748 +
drivers/block/drbd/drbd2_nl_gen.h | 107 +
drivers/block/drbd/drbd_actlog.c | 1267 +-
drivers/block/drbd/drbd_bitmap.c | 1989 +-
drivers/block/drbd/drbd_config.h | 44 +-
drivers/block/drbd/drbd_dax_pmem.c | 172 +
drivers/block/drbd/drbd_dax_pmem.h | 43 +
drivers/block/drbd/drbd_debugfs.c | 1721 +-
drivers/block/drbd/drbd_debugfs.h | 2 +
drivers/block/drbd/drbd_int.h | 3748 ++--
drivers/block/drbd/drbd_interval.c | 37 +-
drivers/block/drbd/drbd_interval.h | 125 +-
drivers/block/drbd/drbd_legacy_84.c | 641 +
drivers/block/drbd/drbd_legacy_84.h | 129 +
drivers/block/drbd/drbd_main.c | 6680 +++++--
drivers/block/drbd/drbd_meta_data.h | 154 +
drivers/block/drbd/drbd_nl.c | 9477 ++++++---
drivers/block/drbd/drbd_nl.h | 390 +
drivers/block/drbd/drbd_nl_84.c | 3622 ++++
drivers/block/drbd/drbd_nl_defaults.c | 167 +
drivers/block/drbd/drbd_nl_drbd2.c | 2533 +++
drivers/block/drbd/drbd_nl_types.h | 388 +
drivers/block/drbd/drbd_polymorph_printk.h | 37 +-
drivers/block/drbd/drbd_proc.c | 327 +-
drivers/block/drbd/drbd_protocol.h | 614 +-
drivers/block/drbd/drbd_receiver.c | 16314 ++++++++++++----
drivers/block/drbd/drbd_req.c | 3172 ++-
drivers/block/drbd/drbd_req.h | 332 +-
drivers/block/drbd/drbd_sender.c | 4354 +++--
drivers/block/drbd/drbd_state.c | 8963 +++++++--
drivers/block/drbd/drbd_state.h | 326 +-
drivers/block/drbd/drbd_state_change.h | 80 +-
drivers/block/drbd/drbd_strings.c | 103 +-
drivers/block/drbd/drbd_strings.h | 4 +-
drivers/block/drbd/drbd_transport.c | 545 +
drivers/block/drbd/drbd_transport.h | 480 +
drivers/block/drbd/drbd_transport_tcp.c | 1746 ++
drivers/block/drbd/drbd_transport_template.c | 164 +
include/uapi/linux/drbd.h | 299 +-
include/uapi/linux/drbd2.h | 1012 +
include/uapi/linux/drbd_limits.h | 135 +-
46 files changed, 58914 insertions(+), 17014 deletions(-)
create mode 100644 Documentation/admin-guide/blockdev/drbd/application-resync-synchronization.rst
create mode 100644 Documentation/netlink/specs/drbd2.yaml
create mode 100644 drivers/block/drbd/drbd2_nl_gen.c
create mode 100644 drivers/block/drbd/drbd2_nl_gen.h
create mode 100644 drivers/block/drbd/drbd_dax_pmem.c
create mode 100644 drivers/block/drbd/drbd_dax_pmem.h
create mode 100644 drivers/block/drbd/drbd_legacy_84.c
create mode 100644 drivers/block/drbd/drbd_legacy_84.h
create mode 100644 drivers/block/drbd/drbd_meta_data.h
create mode 100644 drivers/block/drbd/drbd_nl.h
create mode 100644 drivers/block/drbd/drbd_nl_84.c
create mode 100644 drivers/block/drbd/drbd_nl_defaults.c
create mode 100644 drivers/block/drbd/drbd_nl_drbd2.c
create mode 100644 drivers/block/drbd/drbd_nl_types.h
create mode 100644 drivers/block/drbd/drbd_transport.c
create mode 100644 drivers/block/drbd/drbd_transport.h
create mode 100644 drivers/block/drbd/drbd_transport_tcp.c
create mode 100644 drivers/block/drbd/drbd_transport_template.c
create mode 100644 include/uapi/linux/drbd2.h
base-commit: c3bcce56763375946bc31a4dac859b4b4cc07ccd
--
2.55.0