summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZdenek Kabelac <zkabelac@redhat.com>2014-03-04 16:22:11 +0100
committerZdenek Kabelac <zkabelac@redhat.com>2014-03-04 16:27:00 +0100
commitb47bdb4dca6eda577206aa76b83697524111d046 (patch)
treef8fbd0ca28005b5450a55fed0cfcb7f23e311fbb
parent30810de1b07a145de8a7629bebcfd0d2e48622a5 (diff)
downloadlvm2-b47bdb4dca6eda577206aa76b83697524111d046.tar.gz
tests: check readability of /dev/kmsg
Looks like there are systems with /dev/kmsg device, which is however not readable Fix check for result value of klogctl and use only positive value.
-rw-r--r--test/lib/harness.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/test/lib/harness.c b/test/lib/harness.c
index 8b2c3b67d..d02e9ded1 100644
--- a/test/lib/harness.c
+++ b/test/lib/harness.c
@@ -292,9 +292,11 @@ static void clear_dmesg(void)
static void drain_dmesg(void)
{
char buf[1024 * 1024 + 1];
- size_t sz = klogctl(SYSLOG_ACTION_READ_CLEAR, buf, sizeof(buf) - 1);
- buf[sz] = 0;
- _append_buf(buf, sz);
+ int sz = klogctl(SYSLOG_ACTION_READ_CLEAR, buf, sizeof(buf) - 1);
+ if (sz > 0) {
+ buf[sz] = 0;
+ _append_buf(buf, sz);
+ }
}
static const char *duration(time_t start, const struct rusage *usage)
@@ -437,11 +439,18 @@ static void run(int i, char *f) {
if ((fd_kmsg = open("/dev/kmsg", O_RDONLY | O_NONBLOCK)) < 0) {
if (errno != ENOENT) /* Older kernels (<3.5) do not support /dev/kmsg */
perror("open /dev/kmsg");
- else if ((clobber_dmesg = strcmp(getenv("LVM_TEST_CAN_CLOBBER_DMESG") ? : "0", "0")))
- clear_dmesg();
+ } else if (read(fd_kmsg, NULL, 0) == -1) {
+ /* There is /dev/kmsg, but unreadable -> ignore it (RHEL6?) */
+ perror("read /dev/kmsg");
+ close(fd_kmsg);
+ fd_kmsg = -1;
} else if (lseek(fd_kmsg, 0L, SEEK_END) == (off_t) -1)
perror("lseek /dev/kmsg");
+ if ((fd_kmsg < 0) &&
+ (clobber_dmesg = strcmp(getenv("LVM_TEST_CAN_CLOBBER_DMESG") ? : "0", "0")))
+ clear_dmesg();
+
while ((w = wait4(pid, &st, WNOHANG, &usage)) == 0) {
if ((fullbuffer && fullbuffer++ == 8000) ||
(no_write > 180 * 2)) /* a 3 minute timeout */