diff options
author | Karel Zak | 2012-07-20 13:24:42 +0200 |
---|---|---|
committer | Karel Zak | 2012-07-20 13:24:42 +0200 |
commit | c677ffba974b29f6bd61aba161c219b3757bcfc1 (patch) | |
tree | 02e0508cd45daaaa5a0fb0457f0eb85faa3d0131 /sys-utils/dmesg.c | |
parent | dmesg: read /dev/kmsg (since kernel 3.5.0) (diff) | |
download | kernel-qcow2-util-linux-c677ffba974b29f6bd61aba161c219b3757bcfc1.tar.gz kernel-qcow2-util-linux-c677ffba974b29f6bd61aba161c219b3757bcfc1.tar.xz kernel-qcow2-util-linux-c677ffba974b29f6bd61aba161c219b3757bcfc1.zip |
dmesg: support --clear for kmsg
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'sys-utils/dmesg.c')
-rw-r--r-- | sys-utils/dmesg.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/sys-utils/dmesg.c b/sys-utils/dmesg.c index 57ba7d26b..46d1e3106 100644 --- a/sys-utils/dmesg.c +++ b/sys-utils/dmesg.c @@ -495,6 +495,8 @@ static ssize_t read_buffer(struct dmesg_control *ctl, char **buf) * Since kernel 3.5.0 */ n = read_kmsg(ctl); + if (n == 0 && ctl->action == SYSLOG_ACTION_READ_CLEAR) + n = klogctl(SYSLOG_ACTION_CLEAR, NULL, 0); break; } @@ -769,7 +771,17 @@ static void print_buffer(struct dmesg_control *ctl, static int init_kmsg(struct dmesg_control *ctl) { ctl->kmsg = open("/dev/kmsg", O_RDONLY|O_NONBLOCK); - return ctl->kmsg < 0 ? -1 : 0; + if (ctl->kmsg < 0) + return -1; + + /* + * Seek after the last record available at the time + * the last SYSLOG_ACTION_CLEAR was issued. + * + * ... otherwise SYSLOG_ACTION_CLEAR will have no effect for kmsg. + */ + lseek(ctl->kmsg, 0, SEEK_DATA); + return 0; } /* |