All of lore.kernel.org
 help / color / mirror / Atom feed
From: Calvin Owens <calvinowens@fb.com>
To: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	David Howells <dhowells@redhat.com>,
	Pranith Kumar <bobby.prani@gmail.com>,
	David Woodhouse <David.Woodhouse@intel.com>,
	Johannes Weiner <hannes@cmpxchg.org>,
	Ard Biesheuvel <ard.biesheuvel@linaro.org>,
	Petr Mladek <pmladek@suse.com>, Tejun Heo <tj@kernel.org>,
	Sergey Senozhatsky <sergey.senozhatsky@gmail.com>,
	Vasily Averin <vvs@virtuozzo.com>,
	Thierry Reding <treding@nvidia.com>,
	Geliang Tang <geliangtang@163.com>,
	Ivan Delalande <colona@arista.com>
Cc: <linux-kernel@vger.kernel.org>, <kernel-team@fb.com>,
	<calvinowens@fb.com>
Subject: [RFC][PATCH] printk: Add option to append kernel version to the dict
Date: Fri, 13 May 2016 13:58:04 -0700	[thread overview]
Message-ID: <51047c0f6e86abcb9ee13f60653b6946f8fcfc99.1463172791.git.calvinowens@fb.com> (raw)

We use netconsole to collect kernel logs from all the servers at
Facebook. We use this patch internally so each logline has a record of
which kernel version emitted it.

At first glance, this might seem lazy: as you would expect, we have a
database which records which kernel version a host is currently running.
But there are a lot of situations where that database cannot be current:
early-ish boot crashes are probably the best example, but even beyond
that there are lots of varieties of kernel brokenness that can prevent
the database from being updated. Doing it explicitly this way ensures
that we always know exactly what version emitted a given message.

Doing it in printk() itself rather than extended netconsole ends up
being much simpler, and has the advantage that future extended console
implementations will be able to benefit from this as well.

Signed-off-by: Calvin Owens <calvinowens@fb.com>
---
 init/Kconfig           |  8 ++++++++
 kernel/printk/printk.c | 14 ++++++++++++++
 2 files changed, 22 insertions(+)

diff --git a/init/Kconfig b/init/Kconfig
index 0dfd09d..f800256 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -1454,6 +1454,14 @@ config PRINTK
 	  very difficult to diagnose system problems, saying N here is
 	  strongly discouraged.
 
+config PRINTK_APPEND_UNAME
+	default n
+	bool "Append the kernel version to the printk() dict" if EXPERT
+	help
+	  This option causes the printk() implementation to append the kernel
+	  version for extended console messages. This can be very useful for
+	  monitoring a large deployment of servers with extended netconsole.
+
 config BUG
 	bool "BUG() support" if EXPERT
 	default y
diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
index bfbf284..3f8debd 100644
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
@@ -608,6 +608,18 @@ static ssize_t msg_print_ext_body(char *buf, size_t size,
 	return p - buf;
 }
 
+#if defined(CONFIG_PRINTK_APPEND_UNAME)
+static ssize_t msg_print_ext_uname(char *buf, size_t size)
+{
+	return scnprintf(buf, size, " UNAME=%s\n", init_utsname()->release);
+}
+#else
+static ssize_t msg_print_ext_uname(char *buf, size_t size)
+{
+	return 0;
+}
+#endif
+
 /* /dev/kmsg - userspace message inject/listen interface */
 struct devkmsg_user {
 	u64 seq;
@@ -2305,6 +2317,8 @@ skip:
 						sizeof(ext_text) - ext_len,
 						log_dict(msg), msg->dict_len,
 						log_text(msg), msg->text_len);
+			ext_len += msg_print_ext_uname(ext_text + ext_len,
+						sizeof(ext_text) - ext_len);
 		}
 		console_idx = log_next(console_idx);
 		console_seq++;
-- 
2.8.0.rc2

             reply	other threads:[~2016-05-13 20:58 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-05-13 20:58 Calvin Owens [this message]
2016-05-14 22:19 ` [RFC][PATCH] printk: Add option to append kernel version to the dict Richard Weinberger
2016-05-16 21:41   ` Calvin Owens
2016-05-15  6:36 ` Sergey Senozhatsky
2016-05-16 22:02   ` Calvin Owens
2016-05-17 14:42     ` Sergey Senozhatsky
2016-05-17 13:51       ` Tejun Heo
2016-05-17 15:43         ` Sergey Senozhatsky
2016-05-17 16:05           ` Tejun Heo
2016-05-17  9:24 ` Petr Mladek
2016-05-17 10:08   ` Tejun Heo

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=51047c0f6e86abcb9ee13f60653b6946f8fcfc99.1463172791.git.calvinowens@fb.com \
    --to=calvinowens@fb.com \
    --cc=David.Woodhouse@intel.com \
    --cc=akpm@linux-foundation.org \
    --cc=ard.biesheuvel@linaro.org \
    --cc=bobby.prani@gmail.com \
    --cc=colona@arista.com \
    --cc=dhowells@redhat.com \
    --cc=geliangtang@163.com \
    --cc=hannes@cmpxchg.org \
    --cc=kernel-team@fb.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=paulmck@linux.vnet.ibm.com \
    --cc=pmladek@suse.com \
    --cc=sergey.senozhatsky@gmail.com \
    --cc=tj@kernel.org \
    --cc=treding@nvidia.com \
    --cc=vvs@virtuozzo.com \
    /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.