All of lore.kernel.org
 help / color / mirror / Atom feed
From: Petr Mladek <pmladek@suse.com>
To: Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>
Cc: Steven Rostedt <rostedt@goodmis.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Dmitriy Vyukov <dvyukov@google.com>,
	Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>,
	Tejun Heo <tj@kernel.org>, Peter Zijlstra <peterz@infradead.org>,
	LKML <linux-kernel@vger.kernel.org>,
	Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Subject: Re: [RFC][PATCH 1/3] printk: keep kernel cont support always enabled
Date: Tue, 9 Oct 2018 10:14:10 +0200	[thread overview]
Message-ID: <20181009081410.cunmqz4zc7sdhwkx@pathway.suse.cz> (raw)
In-Reply-To: <20181002023836.4487-2-sergey.senozhatsky@gmail.com>

On Tue 2018-10-02 11:38:34, Sergey Senozhatsky wrote:
> Since 5c2992ee7fd8a29 ("printk: remove console flushing special
> cases for partial buffered lines") we don't print cont fragments
> to the consoles; cont lines are now proper log_buf entries and
> there is no "consecutive continuation flag" anymore: we either
> have 'c' entries that mark continuation lines without fragments;
> or '-' entries that mark normal logbuf entries. There are no '+'
> entries anymore.
> 
> However, we still have a small leftover - presence of ext_console
> drivers disables kernel cont support and we flush each pr_cont()
> and store it as a separate log_buf entry. Previously, it worked
> because msg_print_ext_header() had that "an optional external merge
> of the records" functionality:
> 
> 	if (msg->flags & LOG_CONT)
> 		cont = (prev_flags & LOG_CONT) ? '+' : 'c';
> 
> We don't do this as of now, so keep kernel cont always enabled.
>
> Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
> ---
>  kernel/printk/printk.c | 22 ++++------------------
>  1 file changed, 4 insertions(+), 18 deletions(-)
> 
> 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;
>  	}

Just to be sure. The original purpose was to get full information
including the metadata and dictionary via extended console drivers,
see commit 6fe29354befe4c46e ("printk: implement support for extended
console drivers").

IMHO, only the dictionary was really important but it was actually
lost:

  static void cont_flush(void)
  {
  [...]
	log_store(cont.facility, cont.level, cont.flags, cont.ts_nsec,
		  NULL, 0, cont.buf, cont.len);

Nobody noticed because the only dictionary user is dev_printk()
and dev_cont() is _not_ defined.

As a result, I think that this change will rather improve things.
Well, I wonder if we should write something of the above into
the commit message. Either way:

Reviewed-by: Petr Mladek <pmladek@suse.com>

Best Regards,
Petr

  reply	other threads:[~2018-10-09  8:14 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-02  2:38 [RFC][PATCH 0/3] printk: some pr_cont tweaks and cleanups Sergey Senozhatsky
2018-10-02  2:38 ` [RFC][PATCH 1/3] printk: keep kernel cont support always enabled Sergey Senozhatsky
2018-10-09  8:14   ` Petr Mladek [this message]
2018-10-09 12:41     ` Sergey Senozhatsky
2018-10-02  2:38 ` [RFC][PATCH 2/3] printk: lock/unlock console only for new logbuf entries Sergey Senozhatsky
2018-10-09  8:39   ` Petr Mladek
2018-10-09 12:35     ` Sergey Senozhatsky
2018-10-02  2:38 ` [RFC][PATCH 3/3] printk: do not preliminary split up cont buffer Sergey Senozhatsky
2018-10-09  8:42   ` Petr Mladek
2018-10-09 12:31     ` Sergey Senozhatsky
2018-10-12  8:27 ` [RFC][PATCH 0/3] printk: some pr_cont tweaks and cleanups Petr Mladek
2018-10-12  9:25   ` Sergey Senozhatsky

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20181009081410.cunmqz4zc7sdhwkx@pathway.suse.cz \
    --to=pmladek@suse.com \
    --cc=akpm@linux-foundation.org \
    --cc=dvyukov@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=penguin-kernel@i-love.sakura.ne.jp \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=sergey.senozhatsky.work@gmail.com \
    --cc=sergey.senozhatsky@gmail.com \
    --cc=tj@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.