From: Mike Frysinger Key off of the log buffer rather than the kernel ring buffer as the latter is constantly cleared by userspace daemons. Also, make sure we index into the buffer properly as pointed out by Tim Bird. Signed-off-by: Mike Frysinger Cc: Greg Ungerer Cc: Paul Mundt Cc: Robin Getz Cc: Russell King Cc: Tim Bird Signed-off-by: Andrew Morton --- kernel/printk.c | 9 ++++----- 1 files changed, 4 insertions(+), 5 deletions(-) diff -puN kernel/printk.c~printk-add-interfaces-for-external-access-to-the-log-buffer-fix-2 kernel/printk.c --- a/kernel/printk.c~printk-add-interfaces-for-external-access-to-the-log-buffer-fix-2 +++ a/kernel/printk.c @@ -224,7 +224,7 @@ static inline void boot_delay_msec(void) */ int log_buf_get_len(void) { - return log_end - log_start; + return logged_chars; } /* @@ -247,10 +247,9 @@ int log_buf_copy(char *dest, int idx, in if (len > max) len = max; ret = len; - while (len-- > 0) { - *dest = LOG_BUF(idx++); - ++dest; - } + idx += (log_end - max); + while (len-- > 0) + dest[len] = LOG_BUF(idx + len); } if (took_lock) _