From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932445AbcEMU6X (ORCPT ); Fri, 13 May 2016 16:58:23 -0400 Received: from mx0b-00082601.pphosted.com ([67.231.153.30]:25767 "EHLO mx0a-00082601.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932215AbcEMU6V (ORCPT ); Fri, 13 May 2016 16:58:21 -0400 From: Calvin Owens To: "Paul E. McKenney" , Andrew Morton , David Howells , Pranith Kumar , David Woodhouse , Johannes Weiner , Ard Biesheuvel , Petr Mladek , Tejun Heo , Sergey Senozhatsky , Vasily Averin , Thierry Reding , Geliang Tang , Ivan Delalande CC: , , Subject: [RFC][PATCH] printk: Add option to append kernel version to the dict Date: Fri, 13 May 2016 13:58:04 -0700 Message-ID: <51047c0f6e86abcb9ee13f60653b6946f8fcfc99.1463172791.git.calvinowens@fb.com> X-Mailer: git-send-email 2.8.0.rc2 X-FB-Internal: Safe MIME-Version: 1.0 Content-Type: text/plain X-Proofpoint-Spam-Reason: safe X-FB-Internal: Safe X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2016-05-13_08:,, signatures=0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 --- 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