summaryrefslogtreecommitdiffstats
path: root/kernel/printk/printk.c
diff options
context:
space:
mode:
authorJohn Ogness <john.ogness@linutronix.de>2020-09-14 14:39:51 +0206
committerPetr Mladek <pmladek@suse.com>2020-09-15 15:47:19 +0200
commitcc5c7041c6e1fe8c02fe9e16f28a5e52f7a6957c (patch)
treecb181f7c18be6a1067bd3a906dd8824a64b5196d /kernel/printk/printk.c
parente3bc0401c1de2feb15601685b85b4dea45130386 (diff)
downloadlinux-cc5c7041c6e1fe8c02fe9e16f28a5e52f7a6957c.tar.bz2
printk: ringbuffer: clear initial reserved fields
prb_reserve() will set some meta data values and leave others uninitialized (or rather, containing the values of the previous wrap). Simplify the API by always clearing out all the fields. Only the sequence number is filled in. The caller is now responsible for filling in the rest of the meta data fields. In particular, for correctly filling in text and dict lengths. Signed-off-by: John Ogness <john.ogness@linutronix.de> Reviewed-by: Petr Mladek <pmladek@suse.com> Signed-off-by: Petr Mladek <pmladek@suse.com> Link: https://lore.kernel.org/r/20200914123354.832-4-john.ogness@linutronix.de
Diffstat (limited to 'kernel/printk/printk.c')
-rw-r--r--kernel/printk/printk.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
index fec71229169e..964b5701688f 100644
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
@@ -520,8 +520,11 @@ static int log_store(u32 caller_id, int facility, int level,
memcpy(&r.text_buf[0], text, text_len);
if (trunc_msg_len)
memcpy(&r.text_buf[text_len], trunc_msg, trunc_msg_len);
- if (r.dict_buf)
+ r.info->text_len = text_len + trunc_msg_len;
+ if (r.dict_buf) {
memcpy(&r.dict_buf[0], dict, dict_len);
+ r.info->dict_len = dict_len;
+ }
r.info->facility = facility;
r.info->level = level & 7;
r.info->flags = flags & 0x1f;
@@ -1069,10 +1072,11 @@ static unsigned int __init add_to_rb(struct printk_ringbuffer *rb,
if (!prb_reserve(&e, rb, &dest_r))
return 0;
- memcpy(&dest_r.text_buf[0], &r->text_buf[0], dest_r.text_buf_size);
+ memcpy(&dest_r.text_buf[0], &r->text_buf[0], r->info->text_len);
+ dest_r.info->text_len = r->info->text_len;
if (dest_r.dict_buf) {
- memcpy(&dest_r.dict_buf[0], &r->dict_buf[0],
- dest_r.dict_buf_size);
+ memcpy(&dest_r.dict_buf[0], &r->dict_buf[0], r->info->dict_len);
+ dest_r.info->dict_len = r->info->dict_len;
}
dest_r.info->facility = r->info->facility;
dest_r.info->level = r->info->level;