On Sun, Oct 23, 2016 at 12:32 PM, Linus Torvalds wrote: > > No, the real complexity comes from that interaction with the console > output, which is done outside the core log locks, and which currently > has the added thing where we have a "has this line fragment been > flushed or not". Ok, so here's the stupid patch that removes all the partial line flushing. NOTE! It still leaves all the games with LOG_NEWLINE and LOG_NOCONS that are pretty much pointless with it. So there's room for more simplification here. In particular, the games with LOG_NEWLINE is what Geert's "console and dmesg output looks different" at least partially comes from. What happens is that "dmesg" always shows the records as one line (so it effectively ignores LOG_NEWLINE), but the console output (in msg_print_text() still has that LOG_NEWLINE logic. In particular, msg_print_text() looks at the *previous* logged line to decide whether it should do newlines etc, which is why Geert gets that odd "two continuations per line" pattern on the console, but "one continuation per line" in dmesg. That comes from the interaction with flushing to the console and LOG_NEWLINE and just general complexity. All of that LOG_NEWLINE code could be removed. But again, this patch doesn't do that removal. It just removes the partial console flushing and simplifies that part of the code. (This patch removes way more lines than it adds, but the *real* advantage is that it removes complexity. The rules for console_cont_flush() really were _very_ hard to grok, it has subtle interactions with cont_add() and cont_flush() through that "cont.cons" and "cont.flushed" logic that is all removed by this patch). Linus