On (10/01/18 14:52), Sergey Senozhatsky wrote: > On (09/29/18 20:13), Sergey Senozhatsky wrote: > > We used to flush "incomplete" cont lines (fragments) from console_unlock(). > > > > void console_unlock(void) > > { > > ... > > /* flush buffered message fragment immediately to console */ > > console_cont_flush(text, sizeof(text)); > > again: > > for (;;) { > > ... > > } > > ... > > } > > > > Unless I'm missing something, we don't anymore. > > Since 5c2992ee7fd8a29d04125dc0aa3522784c5fa5eb. > > Now we print only log_buf entries. So we either wait for a \n to flush > > a complete cont buffer, or for a race to preliminary flush cont buffer. > > BTW, it just crossed my mind:
One more thing. Since we don't print cont fragments to the consoles anymore, do we still need the "extended consoles disable kernel cont support" thing? cont lines are proper log_buf entries now, there is nothing to reassemble according to "consecutive continuation flags". Or am I wrong? --- diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c index 308497194bd4..e72cb793aff1 100644 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -192,16 +192,7 @@ int devkmsg_sysctl_set_loglvl(struct ctl_table *table, int write, return 0; } -/* - * Number of registered extended console drivers. - * - * If extended consoles are present, in-kernel cont reassembly is disabled - * and each fragment is stored as a separate log entry with proper - * continuation flag so that every emitted message has full metadata. This - * doesn't change the result for regular consoles or /proc/kmsg. For - * /dev/kmsg, as long as the reader concatenates messages according to - * consecutive continuation flags, the end result should be the same too. - */ +/* Number of registered extended console drivers. */ static int nr_ext_console_drivers; /* @@ -1806,12 +1797,8 @@ static void cont_flush(void) static bool cont_add(int facility, int level, enum log_flags flags, const char *text, size_t len) { - /* - * If ext consoles are present, flush and skip in-kernel - * continuation. See nr_ext_console_drivers definition. Also, if - * the line gets too long, split it up in separate records. - */ - if (nr_ext_console_drivers || cont.len + len > sizeof(cont.buf)) { + /* If the line gets too long, split it up in separate records. */ + if (cont.len + len > sizeof(cont.buf)) { cont_flush(); return false; } @@ -2731,8 +2718,7 @@ void register_console(struct console *newcon) } if (newcon->flags & CON_EXTENDED) - if (!nr_ext_console_drivers++) - pr_info("printk: continuation disabled due to ext consoles, expect more fragments in /dev/kmsg\n"); + nr_ext_console_drivers++; if (newcon->flags & CON_PRINTBUFFER) { /* --- -ss