| From 98512b2cc67328a633a9a0efd0e8ee0fe1f8166b Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 19 Dec 2019 12:59:22 +0106 |
| Subject: printk: fix exclusive_console replaying |
| |
| From: John Ogness <john.ogness@linutronix.de> |
| |
| [ Upstream commit def97da136515cb289a14729292c193e0a93bc64 ] |
| |
| Commit f92b070f2dc8 ("printk: Do not miss new messages when replaying |
| the log") introduced a new variable @exclusive_console_stop_seq to |
| store when an exclusive console should stop printing. It should be |
| set to the @console_seq value at registration. However, @console_seq |
| is previously set to @syslog_seq so that the exclusive console knows |
| where to begin. This results in the exclusive console immediately |
| reactivating all the other consoles and thus repeating the messages |
| for those consoles. |
| |
| Set @console_seq after @exclusive_console_stop_seq has stored the |
| current @console_seq value. |
| |
| Fixes: f92b070f2dc8 ("printk: Do not miss new messages when replaying the log") |
| Link: http://lkml.kernel.org/r/20191219115322.31160-1-john.ogness@linutronix.de |
| Cc: Steven Rostedt <rostedt@goodmis.org> |
| Cc: linux-kernel@vger.kernel.org |
| Signed-off-by: John Ogness <john.ogness@linutronix.de> |
| Acked-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com> |
| Signed-off-by: Petr Mladek <pmladek@suse.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| kernel/printk/printk.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c |
| index 845efadaf7ecf..7a2fdc097c8cb 100644 |
| --- a/kernel/printk/printk.c |
| +++ b/kernel/printk/printk.c |
| @@ -2717,8 +2717,6 @@ void register_console(struct console *newcon) |
| * for us. |
| */ |
| logbuf_lock_irqsave(flags); |
| - console_seq = syslog_seq; |
| - console_idx = syslog_idx; |
| /* |
| * We're about to replay the log buffer. Only do this to the |
| * just-registered console to avoid excessive message spam to |
| @@ -2730,6 +2728,8 @@ void register_console(struct console *newcon) |
| */ |
| exclusive_console = newcon; |
| exclusive_console_stop_seq = console_seq; |
| + console_seq = syslog_seq; |
| + console_idx = syslog_idx; |
| logbuf_unlock_irqrestore(flags); |
| } |
| console_unlock(); |
| -- |
| 2.20.1 |
| |