static int server_read_dev_kmsg(Server *s) { char buffer[8192+1]; /* the kernel-side limit per record is 8K currently */ ssize_t l; assert(s); assert(s->dev_kmsg_fd >= 0); l = read(s->dev_kmsg_fd, buffer, sizeof(buffer) - 1); if (l == 0) return 0; if (l < 0) { /* Old kernels who don't allow reading from /dev/kmsg * return EINVAL when we try. So handle this cleanly, * but don' try to ever read from it again. */ if (errno == EINVAL) { s->dev_kmsg_event_source = sd_event_source_unref(s->dev_kmsg_event_source); return 0; } if (IN_SET(errno, EAGAIN, EINTR, EPIPE)) return 0; return log_error_errno(errno, "Failed to read from kernel: %m"); } dev_kmsg_record(s, buffer, l); return 1; }
int server_read_dev_kmsg(Server *s) { char buffer[8192+1]; /* the kernel-side limit per record is 8K currently */ ssize_t l; assert(s); assert(s->dev_kmsg_fd >= 0); l = read(s->dev_kmsg_fd, buffer, sizeof(buffer) - 1); if (l == 0) return 0; if (l < 0) { /* Old kernels who don't allow reading from /dev/kmsg * return EINVAL when we try. So handle this cleanly, * but don' try to ever read from it again. */ if (errno == EINVAL) { epoll_ctl(s->epoll_fd, EPOLL_CTL_DEL, s->dev_kmsg_fd, NULL); return 0; } if (errno == EAGAIN || errno == EINTR || errno == EPIPE) return 0; log_error("Failed to read from kernel: %m"); return -errno; } dev_kmsg_record(s, buffer, l); return 1; }