diff options
| author | Gleb Smirnoff <glebius@FreeBSD.org> | 2024-12-03 20:04:18 +0000 |
|---|---|---|
| committer | Gleb Smirnoff <glebius@FreeBSD.org> | 2024-12-03 20:04:18 +0000 |
| commit | a034c0aeccd899a5872333625771df278e0a8ba7 (patch) | |
| tree | 2aebd441a771430f95e127f1f2fc2586927f7e42 /sys/netlink/netlink_generic.c | |
| parent | edf5608bfef3840718bf31b453efb714ef290f31 (diff) | |
netlink: refactor writer initialization KPI
o Allow callers to initialize a writer that will malloc(9) with M_WAITOK.
o Use size_t for expected malloc size.
o Use correct types to initialize a group writer.
o Rename functions into nl_writer_ namespace instead of nlmsg_, cause
they are working on nl_writer, not on nlmsg.
o Make the KPI responsible to sparsely initialize the writer structure.
o Garbage collect chain writer. Fixes 17083b94a915.
All current consumers are left as is, however some may benefit from
M_WAITOK allocation as well as supplying a correct expected size.
Reviewed by: melifaro
Differential Revision: https://reviews.freebsd.org/D47549
Diffstat (limited to 'sys/netlink/netlink_generic.c')
| -rw-r--r-- | sys/netlink/netlink_generic.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/sys/netlink/netlink_generic.c b/sys/netlink/netlink_generic.c index 28f9fe108ef4..4a3c83da57e1 100644 --- a/sys/netlink/netlink_generic.c +++ b/sys/netlink/netlink_generic.c @@ -256,14 +256,16 @@ nlctrl_notify(void *arg __unused, const struct genl_family *gf, int cmd) { struct nlmsghdr hdr = {.nlmsg_type = NETLINK_GENERIC }; struct genlmsghdr ghdr = { .cmd = cmd }; - struct nl_writer nw = {}; + struct nl_writer nw; - if (nlmsg_get_group_writer(&nw, NLMSG_SMALL, NETLINK_GENERIC, ctrl_group_id)) { - dump_family(&hdr, &ghdr, gf, &nw); - nlmsg_flush(&nw); + if (!nl_writer_group(&nw, NLMSG_SMALL, NETLINK_GENERIC, ctrl_group_id, + false)) { + NL_LOG(LOG_DEBUG, "error allocating group writer"); return; } - NL_LOG(LOG_DEBUG, "error allocating group writer"); + + dump_family(&hdr, &ghdr, gf, &nw); + nlmsg_flush(&nw); } static const struct genl_cmd nlctrl_cmds[] = { |
