X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fjournal%2Fjournald-kmsg.c;h=aca4571ecec7f6a3de31954ee55e71a6b7eefb8d;hp=5c7c06a14ae42d04fad71196b260d77be985bf80;hb=f131770b1465fbf423881f16ba85523a05f846fe;hpb=c0f71f469fef3f3a0822e0021085e6d165df2b46 diff --git a/src/journal/journald-kmsg.c b/src/journal/journald-kmsg.c index 5c7c06a14..aca4571ec 100644 --- a/src/journal/journald-kmsg.c +++ b/src/journal/journald-kmsg.c @@ -25,7 +25,7 @@ #include #include -#include +#include "systemd/sd-messages.h" #include #include "journald-server.h" @@ -37,7 +37,7 @@ void server_forward_kmsg( int priority, const char *identifier, const char *message, - struct ucred *ucred) { + const struct ucred *ucred) { struct iovec iovec[5]; char header_priority[6], header_pid[16]; @@ -71,7 +71,7 @@ void server_forward_kmsg( identifier = ident_buf; } - snprintf(header_pid, sizeof(header_pid), "[%lu]: ", (unsigned long) ucred->pid); + snprintf(header_pid, sizeof(header_pid), "["PID_FMT"]: ", ucred->pid); char_array_0(header_pid); if (identifier) @@ -88,7 +88,7 @@ void server_forward_kmsg( IOVEC_SET_STRING(iovec[n++], "\n"); if (writev(s->dev_kmsg_fd, iovec, n) < 0) - log_debug("Failed to write to /dev/kmsg for logging: %m"); + log_debug_errno(errno, "Failed to write to /dev/kmsg for logging: %m"); free(ident_buf); } @@ -104,7 +104,7 @@ static bool is_us(const char *pid) { return t == getpid(); } -static void dev_kmsg_record(Server *s, char *p, size_t l) { +static void dev_kmsg_record(Server *s, const char *p, size_t l) { struct iovec iovec[N_IOVEC_META_FIELDS + 7 + N_IOVEC_KERNEL_FIELDS + 2 + N_IOVEC_UDEV_FIELDS]; char *message = NULL, *syslog_priority = NULL, *syslog_pid = NULL, *syslog_facility = NULL, *syslog_identifier = NULL, *source_time = NULL; int priority, r; @@ -152,7 +152,7 @@ static void dev_kmsg_record(Server *s, char *p, size_t l) { /* Did we lose any? */ if (serial > *s->kernel_seqnum) server_driver_message(s, SD_MESSAGE_JOURNAL_MISSED, "Missed %"PRIu64" kernel messages", - serial - *s->kernel_seqnum - 1); + serial - *s->kernel_seqnum); /* Make sure we never read this one again. Note that * we always store the next message serial we expect @@ -274,6 +274,9 @@ static void dev_kmsg_record(Server *s, char *p, size_t l) { if (asprintf(&syslog_priority, "PRIORITY=%i", priority & LOG_PRIMASK) >= 0) IOVEC_SET_STRING(iovec[n++], syslog_priority); + if (asprintf(&syslog_facility, "SYSLOG_FACILITY=%i", LOG_FAC(priority)) >= 0) + IOVEC_SET_STRING(iovec[n++], syslog_facility); + if ((priority & LOG_FACMASK) == LOG_KERN) IOVEC_SET_STRING(iovec[n++], "SYSLOG_IDENTIFIER=kernel"); else { @@ -295,9 +298,6 @@ static void dev_kmsg_record(Server *s, char *p, size_t l) { if (syslog_pid) IOVEC_SET_STRING(iovec[n++], syslog_pid); } - - if (asprintf(&syslog_facility, "SYSLOG_FACILITY=%i", LOG_FAC(priority)) >= 0) - IOVEC_SET_STRING(iovec[n++], syslog_facility); } message = cunescape_length_with_prefix(p, pl, "MESSAGE="); @@ -342,7 +342,7 @@ static int server_read_dev_kmsg(Server *s) { if (errno == EAGAIN || errno == EINTR || errno == EPIPE) return 0; - log_error("Failed to read from kernel: %m"); + log_error_errno(errno, "Failed to read from kernel: %m"); return -errno; } @@ -403,7 +403,7 @@ int server_open_dev_kmsg(Server *s) { return 0; } - r = sd_event_add_io(s->event, s->dev_kmsg_fd, EPOLLIN, dispatch_dev_kmsg, s, &s->dev_kmsg_event_source); + r = sd_event_add_io(s->event, &s->dev_kmsg_event_source, s->dev_kmsg_fd, EPOLLIN, dispatch_dev_kmsg, s); if (r < 0) { /* This will fail with EPERM on older kernels where @@ -413,13 +413,13 @@ int server_open_dev_kmsg(Server *s) { goto fail; } - log_error("Failed to add /dev/kmsg fd to event loop: %s", strerror(-r)); + log_error_errno(r, "Failed to add /dev/kmsg fd to event loop: %m"); goto fail; } r = sd_event_source_set_priority(s->dev_kmsg_event_source, SD_EVENT_PRIORITY_IMPORTANT+10); if (r < 0) { - log_error("Failed to adjust priority of kmsg event source: %s", strerror(-r)); + log_error_errno(r, "Failed to adjust priority of kmsg event source: %m"); goto fail; } @@ -428,14 +428,14 @@ int server_open_dev_kmsg(Server *s) { return 0; fail: - close_nointr_nofail(s->dev_kmsg_fd); - s->dev_kmsg_fd = -1; + 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; } int server_open_kernel_seqnum(Server *s) { - int fd; + _cleanup_close_ int fd; uint64_t *p; assert(s); @@ -446,24 +446,21 @@ int server_open_kernel_seqnum(Server *s) { fd = open("/run/systemd/journal/kernel-seqnum", O_RDWR|O_CREAT|O_CLOEXEC|O_NOCTTY|O_NOFOLLOW, 0644); if (fd < 0) { - log_error("Failed to open /run/systemd/journal/kernel-seqnum, ignoring: %m"); + log_error_errno(errno, "Failed to open /run/systemd/journal/kernel-seqnum, ignoring: %m"); return 0; } if (posix_fallocate(fd, 0, sizeof(uint64_t)) < 0) { - log_error("Failed to allocate sequential number file, ignoring: %m"); - close_nointr_nofail(fd); + log_error_errno(errno, "Failed to allocate sequential number file, ignoring: %m"); return 0; } p = mmap(NULL, sizeof(uint64_t), PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0); if (p == MAP_FAILED) { - log_error("Failed to map sequential number file, ignoring: %m"); - close_nointr_nofail(fd); + log_error_errno(errno, "Failed to map sequential number file, ignoring: %m"); return 0; } - close_nointr_nofail(fd); s->kernel_seqnum = p; return 0;