Skip to contentSkip to conversation

bcache: Use struct_size() in kzalloc()

PATCH In review Gustavo A. R. Silva 3 participants 4 messages Jun 17, 2020 – Jun 19, 2020 bcache (block layer cache)

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 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.

---
 drivers/md/bcache/writeback.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/md/bcache/writeback.c +2 -4
index 1cf1e5016cb9..c0db3c860179 100644
@@ -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;
Signature · 1 line
2.27.0
#1 lore raw
Quoted 15 lines · Gustavo A. R. Silva

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.

 drivers/md/bcache/writeback.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/md/bcache/writeback.c +0 -0
index 1cf1e5016cb9..c0db3c860179 100644

drivers/md/bcache/writeback.c static void read_dirty(struct cached_dev *dc) · line 462

Quoted 8 lines
drivers/md/bcache/writeback.c +1 -4
@@ -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 :-)

drivers/md/bcache/writeback.c static void read_dirty(struct cached_dev *dc) · line 463

Quoted 1 line
drivers/md/bcache/writeback.c +1 -0
+						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

Quoted 4 lines
drivers/md/bcache/writeback.c +0 -0
 				     GFP_KERNEL);
 			if (!io)
 				goto err;
#2 lore raw
Quoted 3 lines · Coly Li
Quoted 2 lines · Gustavo A. R. Silva

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

[]

Quoted 1 line

drivers/md/bcache/writeback.c

Quoted 1 line
drivers/md/bcache/writeback.c +0 -0

[]

Quoted 8 lines

drivers/md/bcache/writeback.c static void read_dirty(struct cached_dev *dc) · line 462

Quoted 5 lines
drivers/md/bcache/writeback.c +1 -4
-			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 :-)

Quoted 4 lines

drivers/md/bcache/writeback.c static void read_dirty(struct cached_dev *dc) · line 463

Quoted 1 line
drivers/md/bcache/writeback.c +1 -0
+						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

Quoted 1 line
#3 lore raw
Quoted 15 lines · Joe Perches
Quoted 3 lines · Coly Li
Quoted 2 lines · Gustavo A. R. Silva

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

[]

Quoted 1 line

drivers/md/bcache/writeback.c

Quoted 1 line
drivers/md/bcache/writeback.c +0 -0

[]

Quoted 8 lines

drivers/md/bcache/writeback.c static void read_dirty(struct cached_dev *dc) · line 462

Quoted 5 lines
drivers/md/bcache/writeback.c +1 -4
-			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 :-)

Quoted 6 lines
Quoted 4 lines

drivers/md/bcache/writeback.c static void read_dirty(struct cached_dev *dc) · line 463

Quoted 1 line
drivers/md/bcache/writeback.c +1 -0
+						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.

Quoted 17 lines

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:

Quoted 8 lines

- 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

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