From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934897AbcKKRlk (ORCPT ); Fri, 11 Nov 2016 12:41:40 -0500 Received: from smtprelay0123.hostedemail.com ([216.40.44.123]:34167 "EHLO smtprelay.hostedemail.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753047AbcKKRlj (ORCPT ); Fri, 11 Nov 2016 12:41:39 -0500 X-Session-Marker: 726F737465647440676F6F646D69732E6F7267 X-Spam-Summary: 2,0,0,,d41d8cd98f00b204,rostedt@goodmis.org,:::::::::::::::::::::::,RULES_HIT:41:69:355:379:541:599:800:960:973:988:989:1260:1277:1311:1313:1314:1345:1359:1437:1515:1516:1518:1534:1542:1593:1594:1711:1730:1747:1777:1792:2198:2199:2393:2553:2559:2562:3138:3139:3140:3141:3142:3355:3622:3865:3866:3867:3868:3871:3872:3874:4321:4605:5007:6119:6261:6742:7875:8603:10004:10400:10848:10967:11026:11232:11473:11658:11914:12043:12296:12438:12555:12740:12760:13095:13153:13228:13439:14181:14659:14721:21080:21212:21433:21451:30012:30054:30064:30090:30091,0,RBL:none,CacheIP:none,Bayesian:0.5,0.5,0.5,Netcheck:none,DomainCache:0,MSF:not bulk,SPF:fn,MSBL:0,DNSBL:none,Custom_rules:0:0:0,LFtime:2,LUA_SUMMARY:none X-HE-Tag: beam73_decbfaa43d32 X-Filterd-Recvd-Size: 4059 Date: Fri, 11 Nov 2016 12:41:34 -0500 From: Steven Rostedt To: Petr Mladek Cc: Linus Torvalds , Joe Perches , Andrew Morton , Sergey Senozhatsky , Jason Wessel , Jaroslav Kysela , Takashi Iwai , Chris Mason , Josef Bacik , David Sterba , linux-kernel@vger.kernel.org Subject: Re: [PATCH v2 3/4] printk/btrfs: Handle more message headers Message-ID: <20161111124134.6a7bf9cb@gandalf.local.home> In-Reply-To: <1478695291-12169-4-git-send-email-pmladek@suse.com> References: <1478695291-12169-1-git-send-email-pmladek@suse.com> <1478695291-12169-4-git-send-email-pmladek@suse.com> X-Mailer: Claws Mail 3.14.0 (GTK+ 2.24.31; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, 9 Nov 2016 13:41:30 +0100 Petr Mladek wrote: > The commit 4bcc595ccd80decb4245096e ("printk: reinstate KERN_CONT for > printing continuation lines") allows to define more message headers > for a single message. The motivation is that continuous lines might > get mixed. Therefore it make sense to define the right log level > for every piece of a cont line. > > The current btrfs_printk() macros do not support continuous lines > at the moment. But better be prepared for a custom messages and > avoid potential "lvl" buffer overflow. > > This patch iterates over the entire message header. It is interested > only into the message level like the original code. > > This patch also introduces PRINTK_MAX_SINGLE_HEADER_LEN. Three bytes > are enough for the message level header at the moment. But it used to > be three, see the commit 04d2c8c83d0e3ac5f ("printk: convert the format > for KERN_ to a 2 byte pattern"). > > Also I fixed the default ratelimit level. It looked very strange > when it was different from the default log level. > > Signed-off-by: Petr Mladek > --- > fs/btrfs/super.c | 26 +++++++++++++++----------- > include/linux/printk.h | 2 ++ > 2 files changed, 17 insertions(+), 11 deletions(-) > > diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c > index 74ed5aae6cea..c083d84eaa32 100644 > --- a/fs/btrfs/super.c > +++ b/fs/btrfs/super.c > @@ -202,27 +202,31 @@ void __btrfs_handle_fs_error(struct btrfs_fs_info *fs_info, const char *function > void btrfs_printk(const struct btrfs_fs_info *fs_info, const char *fmt, ...) > { > struct super_block *sb = fs_info->sb; > - char lvl[4]; > + char lvl[PRINTK_MAX_SINGLE_HEADER_LEN + 1]; > struct va_format vaf; > va_list args; > - const char *type = logtypes[4]; > + const char *type = NULL; > int kern_level; > struct ratelimit_state *ratelimit; > > va_start(args, fmt); > > - kern_level = printk_get_level(fmt); > - if (kern_level) { > + while ((kern_level = printk_get_level(fmt)) != 0) { > size_t size = printk_skip_level(fmt) - fmt; > - memcpy(lvl, fmt, size); > - lvl[size] = '\0'; > + > + if (kern_level >= '0' || kern_level <= '7') { Shouldn't this be kernel_level >= '0' && kern_level <= '7' ? -- Steve > + memcpy(lvl, fmt, size); > + lvl[size] = '\0'; > + type = logtypes[kern_level - '0']; > + ratelimit = &printk_limits[kern_level - '0']; > + } > fmt += size; > - type = logtypes[kern_level - '0']; > - ratelimit = &printk_limits[kern_level - '0']; > - } else { > + } > + > + if (!type) { > *lvl = '\0'; > - /* Default to debug output */ > - ratelimit = &printk_limits[7]; > + type = logtypes[4]; > + ratelimit = &printk_limits[4]; > } >