71 lines
3.0 KiB
Diff
71 lines
3.0 KiB
Diff
From 5843c5ebb4341382ae9c87e93c2c87467e573548 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
|
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;
|
|
}
|
|
|