From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754203AbbIISvi (ORCPT ); Wed, 9 Sep 2015 14:51:38 -0400 Received: from mail-wi0-f171.google.com ([209.85.212.171]:36723 "EHLO mail-wi0-f171.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753382AbbIISvf (ORCPT ); Wed, 9 Sep 2015 14:51:35 -0400 From: Rasmus Villemoes To: Joe Perches Cc: Maurizio Lombardi , akpm@linux-foundation.org, tj@kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] lib/vsprintf.c: increase the size of the field_width variable Organization: D03 References: <1441793590-23856-1-git-send-email-mlombard@redhat.com> <1441816432.17219.57.camel@perches.com> X-Hashcash: 1:20:150909:linux-kernel@vger.kernel.org::fMZP3Xz4VSFKU5LI:00000000000000000000000000000000011fO X-Hashcash: 1:20:150909:joe@perches.com::f39GjVQH8dhQuvv9:002SP8 X-Hashcash: 1:20:150909:tj@kernel.org::rcvNR+ICJht+P2Tn:00003z5Z X-Hashcash: 1:20:150909:mlombard@redhat.com::8AZS/tgHn4apy7Rw:0000000000000000000000000000000000000000003cjD X-Hashcash: 1:20:150909:akpm@linux-foundation.org::2/r8isVa/5b0lI+0:0000000000000000000000000000000000003U/X Date: Wed, 09 Sep 2015 20:51:33 +0200 In-Reply-To: <1441816432.17219.57.camel@perches.com> (Joe Perches's message of "Wed, 09 Sep 2015 09:33:52 -0700") Message-ID: <87mvwv4ea2.fsf@rasmusvillemoes.dk> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Sep 09 2015, Joe Perches wrote: > On Wed, 2015-09-09 at 12:13 +0200, Maurizio Lombardi wrote: >> When printing a bitmap using the "%*pb[l]" printk format >> a 16 bit variable (field_width) is used to store the size of the bitmap. >> In some cases 16 bits are not sufficient, the variable overflows and >> printk does not work as expected. > > If more than 16 bits are necessary, it couldn't work > as a single printk is limited to 1024 bytes. I'm also a little confused; I don't see what printk has to do with the reported problem (I'd expect the /sys/... file to be generated by something like seq_printf). >> 3. Bitmap should be set, but still empty >> # cat /sys/bus/pseudo/drivers/scsi_debug/map > [] >> diff --git a/lib/vsprintf.c b/lib/vsprintf.c > [] >> @@ -384,8 +384,8 @@ struct printf_spec { >> u8 flags; /* flags to number() */ >> u8 base; /* number base, 8, 10 or 16 only */ >> u8 qualifier; /* number qualifier, one of 'hHlLtzZ' */ >> - s16 field_width; /* width of output field */ >> s16 precision; /* # of digits/chars */ >> + s32 field_width; /* width of output field */ >> }; >> >> static noinline_for_stack > > And this makes the sizeof struct printf_spec more than > 8 bytes which isn't desireable on x86-32. Or other architectures, I imagine. I'm pretty sure struct printf_spec purposely has sizeof==8 to allow it to be (relatively cheaply) passed around by value. > %*pb is meant for smallish bitmaps, not big ones. Yup. And that leads to my other confusion: Given that the expected output is given as "0-15", does the bitmap really consist of > S16_MAX bits with only the first 16 set? Rasmus