From: "Jan H. Schönherr" <schnhrr@cs.tu-berlin.de>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Kay Sievers <kay@vrfy.org>
Cc: linux-kernel@vger.kernel.org, "Joe Perches" <joe@perches.com>,
"Andrew Morton" <akpm@linux-foundation.org>,
"Stephen Rothwell" <sfr@canb.auug.org.au>,
"Jan H. Schönherr" <schnhrr@cs.tu-berlin.de>
Subject: [PATCH v2 03/14] printk: reclaim cont buffer immediately for fully printed messages
Date: Thu, 6 Dec 2012 18:06:00 +0100 [thread overview]
Message-ID: <1354813571-11253-4-git-send-email-schnhrr@cs.tu-berlin.de> (raw)
In-Reply-To: <1354813571-11253-1-git-send-email-schnhrr@cs.tu-berlin.de>
We only need to keep the contents of the cont buffer, when there is a
partly printed message in it. In both other cases, not yet printed as
well as fully printed messages, we can reclaim the buffer immediately.
Currently, we do not reclaim the cont buffer when it contains a fully
printed message. This commit restructures the logic to achieve that.
(Note, that LOG_NOCONS must still be set for partly _and_ fully printed
messages, making it a bit more complicated than just changing the
if-condition.)
Signed-off-by: Jan H. Schönherr <schnhrr@cs.tu-berlin.de>
---
v2:
- fixed a bug, where the buffer was considered fully printed although
a final newline was still pending
---
kernel/printk.c | 37 ++++++++++++++++++++-----------------
1 file changed, 20 insertions(+), 17 deletions(-)
diff --git a/kernel/printk.c b/kernel/printk.c
index 0927068..13af61c 100644
--- a/kernel/printk.c
+++ b/kernel/printk.c
@@ -1400,24 +1400,27 @@ static void cont_flush(enum log_flags flags)
return;
cont.flags |= flags;
- if (cont.cons) {
- /*
- * If a fragment of this line was directly flushed to the
- * console; wait for the console to pick up the rest of the
- * line. LOG_NOCONS suppresses a duplicated output.
- */
- log_store(cont.facility, cont.level, cont.flags | LOG_NOCONS,
- cont.ts_nsec, NULL, 0, cont.buf, cont.len);
- cont.flushed = true;
- } else {
- /*
- * If no fragment of this line ever reached the console,
- * just submit it to the store and free the buffer.
- */
- log_store(cont.facility, cont.level, cont.flags, cont.ts_nsec,
- NULL, 0, cont.buf, cont.len);
+
+ /*
+ * If a fragment of this line was directly flushed to the console, the
+ * whole line is/was directly printed. Use LOG_NOCONS to suppress a
+ * duplicated output later -- see console_unlock().
+ */
+ if (cont.cons)
+ cont.flags |= LOG_NOCONS;
+
+ log_store(cont.facility, cont.level, cont.flags, cont.ts_nsec, NULL, 0,
+ cont.buf, cont.len);
+
+ /*
+ * If no fragment of this line ever reached the console or everything
+ * has been printed, free the buffer. Otherwise keep it available.
+ */
+ if (!cont.cons || (cont.cons == cont.len &&
+ !(cont.flags & LOG_NEWLINE)))
cont.len = 0;
- }
+ else
+ cont.flushed = true;
}
static bool cont_add(int facility, int level, enum log_flags flags,
--
1.8.0.1.20.g7c65b2e.dirty
next prev parent reply other threads:[~2012-12-06 17:08 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-12-06 17:05 [PATCH v2 00/14] printk() fixes, optimizations, and clean ups Jan H. Schönherr
2012-12-06 17:05 ` [PATCH v2 01/14] printk: drop ambiguous LOG_CONT flag Jan H. Schönherr
2012-12-06 17:05 ` [PATCH v2 02/14] printk: use saved timestamp for temporarily buffered message Jan H. Schönherr
2012-12-06 17:06 ` Jan H. Schönherr [this message]
2012-12-06 17:06 ` [PATCH v2 04/14] printk: do not add unnecessary newlines to the continuation buffer Jan H. Schönherr
2012-12-06 17:06 ` [PATCH v2 05/14] printk: reuse reclaimed continuation buffer immediately Jan H. Schönherr
2012-12-06 17:06 ` [PATCH v2 06/14] printk: move wake_klogd-check out of the loop Jan H. Schönherr
2012-12-06 17:06 ` [PATCH v2 07/14] printk: let cont_print_text() reuse existing code Jan H. Schönherr
2012-12-06 17:06 ` [PATCH v2 08/14] printk: refactor locking in console_unlock() Jan H. Schönherr
2012-12-06 17:06 ` [PATCH v2 09/14] printk: retain unknown log-level until cont_add()/log_store() Jan H. Schönherr
2012-12-06 17:06 ` [PATCH v2 10/14] printk: track previously logged message in log_store() Jan H. Schönherr
2012-12-06 17:06 ` [PATCH v2 11/14] printk: avoid glitches in console output Jan H. Schönherr
2012-12-06 17:06 ` [PATCH v2 12/14] printk: encode formatting in message flags Jan H. Schönherr
2012-12-06 17:06 ` [PATCH v2 13/14] printk: drop now useless tracking of previous " Jan H. Schönherr
2012-12-06 17:06 ` [PATCH v2 14/14] printk: refactor continuation buffer handling Jan H. Schönherr
[not found] ` <20121206133907.37c255e9.akpm@linux-foundation.org>
2012-12-06 23:37 ` [PATCH v2 00/14] printk() fixes, optimizations, and clean ups Joe Perches
[not found] ` <20121206161943.78633125.akpm@linux-foundation.org>
2012-12-07 2:51 ` Joe Perches
2012-12-07 11:47 ` "Jan H. Schönherr"
2012-12-07 15:04 ` Greg Kroah-Hartman
2012-12-07 15:42 ` Joe Perches
2012-12-07 15:58 ` Frederic Weisbecker
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=1354813571-11253-4-git-send-email-schnhrr@cs.tu-berlin.de \
--to=schnhrr@cs.tu-berlin.de \
--cc=akpm@linux-foundation.org \
--cc=gregkh@linuxfoundation.org \
--cc=joe@perches.com \
--cc=kay@vrfy.org \
--cc=linux-kernel@vger.kernel.org \
--cc=sfr@canb.auug.org.au \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®