From 5843c5ebb4341382ae9c87e93c2c87467e573548 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Thu, 19 Sep 2013 16:57:57 -0500 Subject: [PATCH] journald: accept EPOLLERR from /dev/kmsg Also print out unexpected epoll events explictly. --- src/journal/journald-server.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) Index: systemd-206/src/journal/journald-server.c =================================================================== --- systemd-206.orig/src/journal/journald-server.c +++ systemd-206/src/journal/journald-server.c @@ -1075,7 +1075,8 @@ int process_event(Server *s, struct epol ssize_t n; if (ev->events != EPOLLIN) { - log_error("Got invalid event from epoll."); + log_error("Got invalid event from epoll for %s: %"PRIx32, + "signal fd", ev->events); return -EIO; } @@ -1124,8 +1125,12 @@ int process_event(Server *s, struct epol } else if (ev->data.fd == s->dev_kmsg_fd) { int r; - if (ev->events != EPOLLIN) { - log_error("Got invalid event from epoll."); + if (ev->events & EPOLLERR) + log_warning("/dev/kmsg buffer overrun, some messages lost."); + + if (!(ev->events & EPOLLIN)) { + log_error("Got invalid event from epoll for %s: %"PRIx32, + "/dev/kmsg", ev->events); return -EIO; } @@ -1139,7 +1144,9 @@ int process_event(Server *s, struct epol ev->data.fd == s->syslog_fd) { if (ev->events != EPOLLIN) { - log_error("Got invalid event from epoll."); + log_error("Got invalid event from epoll for %s: %"PRIx32, + ev->data.fd == s->native_fd ? "native fd" : "syslog fd", + ev->events); return -EIO; } @@ -1267,7 +1274,8 @@ int process_event(Server *s, struct epol } else if (ev->data.fd == s->stdout_fd) { if (ev->events != EPOLLIN) { - log_error("Got invalid event from epoll."); + log_error("Got invalid event from epoll for %s: %"PRIx32, + "stdout fd", ev->events); return -EIO; } @@ -1278,7 +1286,8 @@ int process_event(Server *s, struct epol StdoutStream *stream; if ((ev->events|EPOLLIN|EPOLLHUP) != (EPOLLIN|EPOLLHUP)) { - log_error("Got invalid event from epoll."); + log_error("Got invalid event from epoll for %s: %"PRIx32, + "stdout stream", ev->events); return -EIO; }