]> git.ipfire.org Git - thirdparty/linux.git/commit
drbd: use genl pre_doit/post_doit
authorChristoph Böhmwalder <christoph.boehmwalder@linbit.com>
Tue, 24 Mar 2026 15:29:07 +0000 (16:29 +0100)
committerJens Axboe <axboe@kernel.dk>
Wed, 25 Mar 2026 13:11:10 +0000 (07:11 -0600)
commit630bbba45cfd3e4f9247cefd3e2cdc03fe40421b
tree4beca594652acafeec8c75d3813e5a6f1c2185e3
parent829def1e35ca3a6ef07d53d47089ef7cff0fd127
drbd: use genl pre_doit/post_doit

Every doit handler followed the same pattern: stack-allocate an
adm_ctx, call drbd_adm_prepare() at the top, call drbd_adm_finish()
at the bottom. This duplicated boilerplate across 25 handlers and
made error paths inconsistent, since some handlers could miss sending
the reply skb on early-exit paths.

The generic netlink framework already provides pre_doit/post_doit
hooks for exactly this purpose. An old comment even noted "this
would be a good candidate for a pre_doit hook".

Use them:

- pre_doit heap-allocates adm_ctx, looks up per-command flags from a
  new drbd_genl_cmd_flags[] table, runs drbd_adm_prepare(), and
  stores the context in info->user_ptr[0].
- post_doit sends the reply, drops kref references for
  device/connection/resource, and frees the adm_ctx.
- Handlers just receive adm_ctx from info->user_ptr[0], set
  reply_dh->ret_code, and return. All teardown is in post_doit.
- drbd_adm_finish() is removed, superseded by post_doit.

Signed-off-by: Christoph Böhmwalder <christoph.boehmwalder@linbit.com>
Link: https://patch.msgid.link/20260324152907.2840984-1-christoph.boehmwalder@linbit.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/block/drbd/drbd_nl.c
include/linux/genl_magic_func.h