Messages in this thread | | | From | Rasmus Villemoes <> | Subject | Re: [PATCH] lib/vsprintf.c: increase the size of the field_width variable | Date | Wed, 09 Sep 2015 20:51:33 +0200 |
| |
On Wed, Sep 09 2015, Joe Perches <joe@perches.com> 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
| |