2020-06-17 22:24:39

by Gustavo A. R. Silva

[permalink] [raw]
Subject: [PATCH][next] bcache: Use struct_size() in kzalloc()

Make use of the struct_size() helper instead of an open-coded version
in order to avoid any potential type mistakes.

This code was detected with the help of Coccinelle and, audited and
fixed manually.

Signed-off-by: Gustavo A. R. Silva <[email protected]>
---
drivers/md/bcache/writeback.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/md/bcache/writeback.c b/drivers/md/bcache/writeback.c
index 1cf1e5016cb9..c0db3c860179 100644
--- a/drivers/md/bcache/writeback.c
+++ b/drivers/md/bcache/writeback.c
@@ -459,10 +459,8 @@ static void read_dirty(struct cached_dev *dc)
for (i = 0; i < nk; i++) {
w = keys[i];

- io = kzalloc(sizeof(struct dirty_io) +
- sizeof(struct bio_vec) *
- DIV_ROUND_UP(KEY_SIZE(&w->key),
- PAGE_SECTORS),
+ io = kzalloc(struct_size(io, bio.bi_inline_vecs,
+ DIV_ROUND_UP(KEY_SIZE(&w->key), PAGE_SECTORS)),
GFP_KERNEL);
if (!io)
goto err;
--
2.27.0


2020-06-18 05:41:33

by Coly Li

[permalink] [raw]
Subject: Re: [PATCH][next] bcache: Use struct_size() in kzalloc()

On 2020/6/18 06:27, Gustavo A. R. Silva wrote:
> Make use of the struct_size() helper instead of an open-coded version
> in order to avoid any potential type mistakes.
>
> This code was detected with the help of Coccinelle and, audited and
> fixed manually.
>
> Signed-off-by: Gustavo A. R. Silva <[email protected]> ---
> drivers/md/bcache/writeback.c | 6 ++----
> 1 file changed, 2 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/md/bcache/writeback.c b/drivers/md/bcache/writeback.c
> index 1cf1e5016cb9..c0db3c860179 100644
> --- a/drivers/md/bcache/writeback.c
> +++ b/drivers/md/bcache/writeback.c
> @@ -459,10 +459,8 @@ static void read_dirty(struct cached_dev *dc)
> for (i = 0; i < nk; i++) {
> w = keys[i];
>
> - io = kzalloc(sizeof(struct dirty_io) +
> - sizeof(struct bio_vec) *
> - DIV_ROUND_UP(KEY_SIZE(&w->key),
> - PAGE_SECTORS),
> + io = kzalloc(struct_size(io, bio.bi_inline_vecs,
^^^^^^^^^^^^^^^^^^
I like this :-)

> + DIV_ROUND_UP(KEY_SIZE(&w->key), PAGE_SECTORS)),

The above line seems too long for 80 characters limitation. Does
checkpatch.pl complain for this ?


Thanks.

Coly Li


> GFP_KERNEL);
> if (!io)
> goto err;
>

2020-06-18 05:45:10

by Joe Perches

[permalink] [raw]
Subject: Re: [PATCH][next] bcache: Use struct_size() in kzalloc()

On Thu, 2020-06-18 at 13:38 +0800, Coly Li wrote:
> On 2020/6/18 06:27, Gustavo A. R. Silva wrote:
> > Make use of the struct_size() helper instead of an open-coded version
> > in order to avoid any potential type mistakes.
[]
> > diff --git a/drivers/md/bcache/writeback.c b/drivers/md/bcache/writeback.c
[]
> > - io = kzalloc(sizeof(struct dirty_io) +
> > - sizeof(struct bio_vec) *
> > - DIV_ROUND_UP(KEY_SIZE(&w->key),
> > - PAGE_SECTORS),
> > + io = kzalloc(struct_size(io, bio.bi_inline_vecs,
> ^^^^^^^^^^^^^^^^^^
> I like this :-)
>
> > + DIV_ROUND_UP(KEY_SIZE(&w->key), PAGE_SECTORS)),
>
> The above line seems too long for 80 characters limitation. Does
> checkpatch.pl complain for this ?

No. checkpatch has changed:

From bdc48fa11e46f867ea4d75fa59ee87a7f48be144 Mon Sep 17 00:00:00 2001
From: Joe Perches <[email protected]>
Date: Fri, 29 May 2020 16:12:21 -0700
Subject: [PATCH] checkpatch/coding-style: deprecate 80-column warning

Yes, staying withing 80 columns is certainly still _preferred_. But
it's not the hard limit that the checkpatch warnings imply, and other
concerns can most certainly dominate.

Increase the default limit to 100 characters. Not because 100
characters is some hard limit either, but that's certainly a "what are
you doing" kind of value and less likely to be about the occasional
slightly longer lines.

Miscellanea:

- to avoid unnecessary whitespace changes in files, checkpatch will no
longer emit a warning about line length when scanning files unless
--strict is also used

- Add a bit to coding-style about alignment to open parenthesis

Signed-off-by: Joe Perches <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
>

2020-06-19 16:23:07

by Coly Li

[permalink] [raw]
Subject: Re: [PATCH][next] bcache: Use struct_size() in kzalloc()

On 2020/6/18 13:42, Joe Perches wrote:
> On Thu, 2020-06-18 at 13:38 +0800, Coly Li wrote:
>> On 2020/6/18 06:27, Gustavo A. R. Silva wrote:
>>> Make use of the struct_size() helper instead of an open-coded version
>>> in order to avoid any potential type mistakes.
> []
>>> diff --git a/drivers/md/bcache/writeback.c b/drivers/md/bcache/writeback.c
> []
>>> - io = kzalloc(sizeof(struct dirty_io) +
>>> - sizeof(struct bio_vec) *
>>> - DIV_ROUND_UP(KEY_SIZE(&w->key),
>>> - PAGE_SECTORS),
>>> + io = kzalloc(struct_size(io, bio.bi_inline_vecs,
>> ^^^^^^^^^^^^^^^^^^
>> I like this :-)
>>
>>> + DIV_ROUND_UP(KEY_SIZE(&w->key), PAGE_SECTORS)),
>>
>> The above line seems too long for 80 characters limitation. Does
>> checkpatch.pl complain for this ?
>
> No. checkpatch has changed:

OK, then this patch is good for me.

>
> From bdc48fa11e46f867ea4d75fa59ee87a7f48be144 Mon Sep 17 00:00:00 2001
> From: Joe Perches <[email protected]>
> Date: Fri, 29 May 2020 16:12:21 -0700
> Subject: [PATCH] checkpatch/coding-style: deprecate 80-column warning
>
> Yes, staying withing 80 columns is certainly still _preferred_. But
> it's not the hard limit that the checkpatch warnings imply, and other
> concerns can most certainly dominate.
>
> Increase the default limit to 100 characters. Not because 100
> characters is some hard limit either, but that's certainly a "what are
> you doing" kind of value and less likely to be about the occasional
> slightly longer lines.
>
> Miscellanea:
>
> - to avoid unnecessary whitespace changes in files, checkpatch will no
> longer emit a warning about line length when scanning files unless
> --strict is also used
>
> - Add a bit to coding-style about alignment to open parenthesis
>
> Signed-off-by: Joe Perches <[email protected]>
> Signed-off-by: Linus Torvalds <[email protected]>

I see. My current monitor may display 4 terminal window with 85
characters width, expending the limit to 100 characters means I probably
have to change my current monitor with a good cause.

Thank you, for such good change.

Coly Li