From: Yu Watanabe Date: Mon, 16 Sep 2024 00:58:51 +0000 (+0900) Subject: network/sysctl: several cleanups for sysctl_add_monitor() X-Git-Tag: v257-rc1~421^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7c778cecdb47a61743ba5eb9d5a1d6d28e1f318f;p=thirdparty%2Fsystemd.git network/sysctl: several cleanups for sysctl_add_monitor() - rename rootcg -> root_cgroup_fd, to emphasize it is a fd, - drop nested function call, and check error code. --- diff --git a/src/network/networkd-sysctl.c b/src/network/networkd-sysctl.c index 2b9e860c818..e7b421959a2 100644 --- a/src/network/networkd-sysctl.c +++ b/src/network/networkd-sysctl.c @@ -94,9 +94,9 @@ int sysctl_add_monitor(Manager *manager) { _cleanup_(sysctl_monitor_bpf_freep) struct sysctl_monitor_bpf *obj = NULL; _cleanup_(bpf_link_freep) struct bpf_link *sysctl_link = NULL; _cleanup_(bpf_ring_buffer_freep) struct ring_buffer *sysctl_buffer = NULL; - _cleanup_close_ int cgroup_fd = -EBADF, rootcg = -EBADF; + _cleanup_close_ int cgroup_fd = -EBADF, root_cgroup_fd = -EBADF; _cleanup_free_ char *cgroup = NULL; - int idx = 0, r; + int idx = 0, r, fd; assert(manager); @@ -110,9 +110,9 @@ int sysctl_add_monitor(Manager *manager) { if (r < 0) return log_warning_errno(r, "Failed to get cgroup path, ignoring: %m."); - rootcg = cg_path_open(SYSTEMD_CGROUP_CONTROLLER, "/"); - if (rootcg < 0) - return log_warning_errno(rootcg, "Failed to open cgroup, ignoring: %m."); + root_cgroup_fd = cg_path_open(SYSTEMD_CGROUP_CONTROLLER, "/"); + if (root_cgroup_fd < 0) + return log_warning_errno(root_cgroup_fd, "Failed to open cgroup, ignoring: %m."); obj = sysctl_monitor_bpf__open_and_load(); if (!obj) { @@ -127,21 +127,27 @@ int sysctl_add_monitor(Manager *manager) { if (sym_bpf_map_update_elem(sym_bpf_map__fd(obj->maps.cgroup_map), &idx, &cgroup_fd, BPF_ANY)) return log_warning_errno(errno, "Failed to update cgroup map: %m"); - sysctl_link = sym_bpf_program__attach_cgroup(obj->progs.sysctl_monitor, rootcg); + sysctl_link = sym_bpf_program__attach_cgroup(obj->progs.sysctl_monitor, root_cgroup_fd); r = bpf_get_error_translated(sysctl_link); if (r < 0) { log_info_errno(r, "Unable to attach sysctl monitor BPF program to cgroup, ignoring: %m."); return 0; } - sysctl_buffer = sym_ring_buffer__new( - sym_bpf_map__fd(obj->maps.written_sysctls), - sysctl_event_handler, &manager->sysctl_shadow, NULL); + fd = sym_bpf_map__fd(obj->maps.written_sysctls); + if (fd < 0) + return log_warning_errno(fd, "Failed to get fd of sysctl maps: %m"); + + sysctl_buffer = sym_ring_buffer__new(fd, sysctl_event_handler, &manager->sysctl_shadow, NULL); if (!sysctl_buffer) return log_warning_errno(errno, "Failed to create ring buffer: %m"); + fd = sym_ring_buffer__epoll_fd(sysctl_buffer); + if (fd < 0) + return log_warning_errno(fd, "Failed to get poll fd of ring buffer: %m"); + r = sd_event_add_io(manager->event, &manager->sysctl_event_source, - sym_ring_buffer__epoll_fd(sysctl_buffer), EPOLLIN, on_ringbuf_io, sysctl_buffer); + fd, EPOLLIN, on_ringbuf_io, sysctl_buffer); if (r < 0) return log_warning_errno(r, "Failed to watch sysctl event ringbuffer: %m");