From: Yu Watanabe Date: Mon, 14 Apr 2025 19:46:58 +0000 (+0900) Subject: journal/kmsg: modernize server_open_dev_kmsg() X-Git-Tag: v258-rc1~816^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9ec1e87bf3f90d4c3ed8bfcf2444eaaaeaadda14;p=thirdparty%2Fsystemd.git journal/kmsg: modernize server_open_dev_kmsg() Let's assign fd and event source only on success. --- diff --git a/src/journal/journald-kmsg.c b/src/journal/journald-kmsg.c index 8c3277ae644..cae91cfb72a 100644 --- a/src/journal/journald-kmsg.c +++ b/src/journal/journald-kmsg.c @@ -381,38 +381,35 @@ int server_open_dev_kmsg(Server *s) { int r; assert(s); + assert(s->dev_kmsg_fd < 0); + assert(!s->dev_kmsg_event_source); - mode_t mode = O_CLOEXEC|O_NONBLOCK|O_NOCTTY| - (s->read_kmsg ? O_RDWR : O_WRONLY); + mode_t mode = O_CLOEXEC|O_NONBLOCK|O_NOCTTY|(s->read_kmsg ? O_RDWR : O_WRONLY); - s->dev_kmsg_fd = open("/dev/kmsg", mode); - if (s->dev_kmsg_fd < 0) { + _cleanup_close_ int fd = open("/dev/kmsg", mode); + if (fd < 0) { log_full_errno(errno == ENOENT ? LOG_DEBUG : LOG_WARNING, errno, "Failed to open /dev/kmsg for %s access, ignoring: %m", accmode_to_string(mode)); return 0; } - if (!s->read_kmsg) + if (!s->read_kmsg) { + s->dev_kmsg_fd = TAKE_FD(fd); return 0; - - r = sd_event_add_io(s->event, &s->dev_kmsg_event_source, s->dev_kmsg_fd, EPOLLIN, dispatch_dev_kmsg, s); - if (r < 0) { - log_error_errno(r, "Failed to add /dev/kmsg fd to event loop: %m"); - goto finish; } - r = sd_event_source_set_priority(s->dev_kmsg_event_source, SD_EVENT_PRIORITY_IMPORTANT+10); - if (r < 0) { - log_error_errno(r, "Failed to adjust priority of kmsg event source: %m"); - goto finish; - } + _cleanup_(sd_event_source_unrefp) sd_event_source *es = NULL; + r = sd_event_add_io(s->event, &es, fd, EPOLLIN, dispatch_dev_kmsg, s); + if (r < 0) + return log_error_errno(r, "Failed to add /dev/kmsg fd to event loop: %m"); - return 0; + r = sd_event_source_set_priority(es, SD_EVENT_PRIORITY_IMPORTANT+10); + if (r < 0) + return log_error_errno(r, "Failed to adjust priority of kmsg event source: %m"); -finish: - s->dev_kmsg_event_source = sd_event_source_unref(s->dev_kmsg_event_source); - s->dev_kmsg_fd = safe_close(s->dev_kmsg_fd); - return r; + s->dev_kmsg_fd = TAKE_FD(fd); + s->dev_kmsg_event_source = TAKE_PTR(es); + return 0; } int server_open_kernel_seqnum(Server *s) {