From: Kay Sievers <kay@vrfy.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Ingo Molnar <mingo@kernel.org>, Jonathan Corbet <corbet@lwn.net>,
Sasha Levin <levinsasha928@gmail.com>,
Greg Kroah-Hartmann <greg@kroah.com>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH RESEND 1/3] printk: convert byte-buffer to variable-length record buffer
Date: Thu, 10 May 2012 04:32:53 +0200 [thread overview]
Message-ID: <1336617173.25027.4.camel@mop> (raw)
In-Reply-To: <CA+55aFyrrH0jJV--L=ugt0YK7pT+jmhjvt_WRWyenyiroN97zg@mail.gmail.com>
On Wed, 2012-05-09 at 18:18 -0700, Linus Torvalds wrote:
> On Wed, May 9, 2012 at 5:54 PM, Kay Sievers <kay@vrfy.org> wrote:
> >
> > How about this? It relaxes the need for KERN_CONT, but it limits
> > continuation lines to repeated calls of the same thread.
>
> Fair enough, looks reasonable.
>
> Except your case-statement sucks. Having a "case 'c':" that basically
> then immediately has an "if (it was not 'c')" is just disturbing. Just
> move the code that is common to all the cases outside the case
> statement entirely, and make the 'c' case not do anything at all, and
> remove that crazy extraneous if-statement.
From: Kay Sievers <kay@vrfy.org>
Subject: printk() - do not merge continuation lines of different threads
This prevents the merging of printk() continuation lines of different
threads, in the case they race against each other.
It should properly isolate "atomic" single-line printk() users from
continuation users, to make sure the single-line users will never be
merged with the racy continuation ones.
Signed-off-by: Kay Sievers <kay@vrfy.org>
---
kernel/printk.c | 19 ++++++++++---------
1 file changed, 10 insertions(+), 9 deletions(-)
--- a/kernel/printk.c
+++ b/kernel/printk.c
@@ -1230,12 +1230,13 @@ asmlinkage int vprintk_emit(int facility
static size_t buflen;
static int buflevel;
static char textbuf[LOG_LINE_MAX];
+ static struct task_struct *cont;
char *text = textbuf;
size_t textlen;
unsigned long flags;
int this_cpu;
bool newline = false;
- bool cont = false;
+ bool prefix = false;
int printed_len = 0;
boot_delay_msec();
@@ -1295,20 +1296,16 @@ asmlinkage int vprintk_emit(int facility
case '0' ... '7':
if (level == -1)
level = text[1] - '0';
- text += 3;
- textlen -= 3;
- break;
- case 'c': /* KERN_CONT */
- cont = true;
case 'd': /* KERN_DEFAULT */
+ prefix = true;
+ case 'c': /* KERN_CONT */
text += 3;
textlen -= 3;
- break;
}
}
- if (buflen && (!cont || dict)) {
- /* no continuation; flush existing buffer */
+ if (buflen && (prefix || dict || cont != current)) {
+ /* flush existing buffer */
log_store(facility, buflevel, NULL, 0, buf, buflen);
printed_len += buflen;
buflen = 0;
@@ -1342,6 +1339,10 @@ asmlinkage int vprintk_emit(int facility
dict, dictlen, text, textlen);
printed_len += textlen;
}
+ cont = NULL;
+ } else {
+ /* remember thread which filled the buffer */
+ cont = current;
}
/*
next prev parent reply other threads:[~2012-05-10 2:33 UTC|newest]
Thread overview: 100+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-05-03 0:29 [PATCH RESEND 1/3] printk: convert byte-buffer to variable-length record buffer Kay Sievers
2012-05-03 19:48 ` Peter Zijlstra
2012-05-03 19:54 ` Kay Sievers
2012-05-03 19:55 ` Peter Zijlstra
2012-05-03 19:56 ` Linus Torvalds
2012-05-03 20:02 ` Peter Zijlstra
2012-05-03 20:09 ` Linus Torvalds
2012-05-03 20:11 ` Peter Zijlstra
2012-05-03 20:18 ` Greg Kroah-Hartmann
2012-05-08 8:48 ` Sasha Levin
2012-05-08 11:14 ` Kay Sievers
2012-05-08 13:33 ` Sasha Levin
2012-05-08 14:29 ` Kay Sievers
2012-05-08 15:33 ` Kay Sievers
2012-05-08 15:57 ` Sasha Levin
2012-05-08 16:27 ` Kay Sievers
2012-05-08 22:57 ` Greg Kroah-Hartmann
2012-05-09 3:52 ` Linus Torvalds
2012-05-09 4:06 ` Joe Perches
2012-05-09 4:11 ` Sasha Levin
2012-05-09 4:27 ` Linus Torvalds
2012-05-09 4:36 ` Linus Torvalds
2012-05-09 7:07 ` Ingo Molnar
2012-05-09 13:21 ` Kay Sievers
2012-05-09 13:29 ` Kay Sievers
2012-05-10 0:54 ` Kay Sievers
2012-05-10 1:18 ` Linus Torvalds
2012-05-10 2:32 ` Kay Sievers [this message]
2012-05-10 2:46 ` Joe Perches
2012-05-10 16:39 ` Kay Sievers
2012-05-10 16:47 ` Linus Torvalds
2012-05-10 18:49 ` Tony Luck
2012-05-10 19:09 ` Kay Sievers
2012-05-10 20:14 ` Ted Ts'o
2012-05-10 20:37 ` Joe Perches
2012-05-10 20:39 ` Kay Sievers
2012-05-10 20:46 ` Joe Perches
2012-05-10 20:52 ` Linus Torvalds
2012-05-10 21:11 ` Joe Perches
2012-05-10 21:15 ` Kay Sievers
2012-05-10 21:58 ` Linus Torvalds
2012-05-11 0:13 ` Joe Perches
2012-05-11 0:38 ` Kay Sievers
2012-05-11 1:23 ` Kay Sievers
2012-05-14 18:46 ` Kay Sievers
2012-05-10 21:01 ` Kay Sievers
2012-05-10 20:38 ` Kay Sievers
2012-05-09 9:38 ` Kay Sievers
2012-05-09 13:50 ` Joe Perches
2012-05-09 14:37 ` Kay Sievers
2012-05-09 23:02 ` Yinghai Lu
2012-05-09 23:06 ` Greg Kroah-Hartmann
2012-05-10 2:30 ` Kay Sievers
2012-05-11 10:35 ` Sasha Levin
2012-05-11 15:19 ` Greg KH
2012-05-11 15:22 ` Sasha Levin
2012-05-11 15:35 ` Linus Torvalds
2012-05-11 15:40 ` Kay Sievers
2012-05-11 15:47 ` Linus Torvalds
2012-05-11 19:51 ` Mark Lord
2012-05-11 20:02 ` Linus Torvalds
2012-05-12 18:04 ` Mark Lord
2012-05-12 7:43 ` Sasha Levin
2012-05-12 18:35 ` Linus Torvalds
2012-05-13 11:08 ` Kay Sievers
2012-05-13 13:22 ` Mark Lord
2012-05-13 18:01 ` Linus Torvalds
2012-05-13 22:19 ` Mark Lord
2012-05-14 16:40 ` valdis.kletnieks
2012-05-17 3:44 ` H. Peter Anvin
2012-05-13 21:48 ` Kay Sievers
2012-05-13 21:30 ` Kay Sievers
2012-05-26 11:11 ` Anton Vorontsov
2012-05-27 14:23 ` Kay Sievers
2012-05-29 16:07 ` Kay Sievers
2012-05-29 16:14 ` Joe Perches
2012-05-29 16:34 ` Kay Sievers
2012-05-29 16:51 ` Joe Perches
2012-05-29 17:11 ` Luck, Tony
2012-05-29 17:22 ` Kay Sievers
2012-05-30 11:29 ` Kay Sievers
2012-06-06 6:33 ` Greg Kroah-Hartmann
2012-06-15 0:04 ` Greg KH
2012-06-15 1:31 ` Anton Vorontsov
2012-06-15 12:07 ` Kay Sievers
2012-06-15 12:23 ` Ingo Molnar
2012-06-15 21:53 ` Greg KH
2012-06-15 12:23 ` Anton Vorontsov
2012-06-15 20:54 ` Tony Luck
2012-11-28 13:33 ` Michael Kerrisk
2012-11-28 16:22 ` Kay Sievers
2012-11-28 16:37 ` Linus Torvalds
2012-11-28 16:49 ` Kay Sievers
2012-11-28 17:51 ` Kay Sievers
2012-11-29 13:18 ` Michael Kerrisk (man-pages)
2012-11-29 13:28 ` Kay Sievers
2012-11-29 13:37 ` Michael Kerrisk (man-pages)
2012-11-29 14:08 ` Kay Sievers
2012-11-29 14:18 ` Michael Kerrisk (man-pages)
2012-11-29 14:31 ` Kay Sievers
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=1336617173.25027.4.camel@mop \
--to=kay@vrfy.org \
--cc=corbet@lwn.net \
--cc=greg@kroah.com \
--cc=levinsasha928@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=torvalds@linux-foundation.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox