public inbox for linux-btrfs@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] btrfs: replace kcalloc() calls to kzalloc_objs()
@ 2026-02-24 21:45 Miquel Sabaté Solà
  2026-02-27  0:27 ` David Sterba
  0 siblings, 1 reply; 3+ messages in thread
From: Miquel Sabaté Solà @ 2026-02-24 21:45 UTC (permalink / raw)
  To: dsterba
  Cc: clm, naohiro.aota, kees, linux-btrfs, linux-kernel,
	Miquel Sabaté Solà

Commit 2932ba8d9c99 ("slab: Introduce kmalloc_obj() and family")
introduced, among many others, the kzalloc_objs() helper, which has some
benefits over kcalloc(). Namely, internal introspection of the allocated
type now becomes possible, allowing for future alignment-aware choices
to be made by the allocator and future hardening work that can be type
sensitive. Dropping 'sizeof' comes also as a nice side-effect.

Moreover, this also allows us to be in line with the recent tree-wide
migration to the kmalloc_obj() and family of helpers. See
commit 69050f8d6d07 ("treewide: Replace kmalloc with kmalloc_obj for
non-scalar types").

Reviewed-by: Kees Cook <kees@kernel.org>
Signed-off-by: Miquel Sabaté Solà <mssola@mssola.com>
---
Changes since v1:
  - Better commit message as suggested by Johannes Thumshirn and Qu Wenruo.
  - Link: https://lore.kernel.org/all/20260223234451.277369-1-mssola@mssola.com/

 fs/btrfs/block-group.c       | 2 +-
 fs/btrfs/raid56.c            | 8 ++++----
 fs/btrfs/tests/zoned-tests.c | 2 +-
 fs/btrfs/volumes.c           | 6 ++----
 fs/btrfs/zoned.c             | 5 ++---
 5 files changed, 10 insertions(+), 13 deletions(-)

diff --git a/fs/btrfs/block-group.c b/fs/btrfs/block-group.c
index 37bea850b3f0..8d85b4707690 100644
--- a/fs/btrfs/block-group.c
+++ b/fs/btrfs/block-group.c
@@ -2239,7 +2239,7 @@ int btrfs_rmap_block(struct btrfs_fs_info *fs_info, u64 chunk_start,
 	if (map->type & BTRFS_BLOCK_GROUP_RAID56_MASK)
 		io_stripe_size = btrfs_stripe_nr_to_offset(nr_data_stripes(map));

-	buf = kcalloc(map->num_stripes, sizeof(u64), GFP_NOFS);
+	buf = kzalloc_objs(*buf, map->num_stripes, GFP_NOFS);
 	if (!buf) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/fs/btrfs/raid56.c b/fs/btrfs/raid56.c
index 02105d68accb..1ebfed8f0a0a 100644
--- a/fs/btrfs/raid56.c
+++ b/fs/btrfs/raid56.c
@@ -2110,8 +2110,8 @@ static int recover_sectors(struct btrfs_raid_bio *rbio)
 	 * @unmap_array stores copy of pointers that does not get reordered
 	 * during reconstruction so that kunmap_local works.
 	 */
-	pointers = kcalloc(rbio->real_stripes, sizeof(void *), GFP_NOFS);
-	unmap_array = kcalloc(rbio->real_stripes, sizeof(void *), GFP_NOFS);
+	pointers = kzalloc_objs(*pointers, rbio->real_stripes, GFP_NOFS);
+	unmap_array = kzalloc_objs(*unmap_array, rbio->real_stripes, GFP_NOFS);
 	if (!pointers || !unmap_array) {
 		ret = -ENOMEM;
 		goto out;
@@ -2844,8 +2844,8 @@ static int recover_scrub_rbio(struct btrfs_raid_bio *rbio)
 	 * @unmap_array stores copy of pointers that does not get reordered
 	 * during reconstruction so that kunmap_local works.
 	 */
-	pointers = kcalloc(rbio->real_stripes, sizeof(void *), GFP_NOFS);
-	unmap_array = kcalloc(rbio->real_stripes, sizeof(void *), GFP_NOFS);
+	pointers = kzalloc_objs(*pointers, rbio->real_stripes, GFP_NOFS);
+	unmap_array = kzalloc_objs(*unmap_array, rbio->real_stripes, GFP_NOFS);
 	if (!pointers || !unmap_array) {
 		ret = -ENOMEM;
 		goto out;
diff --git a/fs/btrfs/tests/zoned-tests.c b/fs/btrfs/tests/zoned-tests.c
index da21c7aea31a..2bc3b14baa41 100644
--- a/fs/btrfs/tests/zoned-tests.c
+++ b/fs/btrfs/tests/zoned-tests.c
@@ -58,7 +58,7 @@ static int test_load_zone_info(struct btrfs_fs_info *fs_info,
 		return -ENOMEM;
 	}

-	zone_info = kcalloc(test->num_stripes, sizeof(*zone_info), GFP_KERNEL);
+	zone_info = kzalloc_objs(*zone_info, test->num_stripes, GFP_KERNEL);
 	if (!zone_info) {
 		test_err("cannot allocate zone info");
 		return -ENOMEM;
diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
index e15e138c515b..c0cf8f7c5a8e 100644
--- a/fs/btrfs/volumes.c
+++ b/fs/btrfs/volumes.c
@@ -5499,8 +5499,7 @@ static int calc_one_profile_avail(struct btrfs_fs_info *fs_info,
 		goto out;
 	}

-	devices_info = kcalloc(fs_devices->rw_devices, sizeof(*devices_info),
-			       GFP_NOFS);
+	devices_info = kzalloc_objs(*devices_info, fs_devices->rw_devices, GFP_NOFS);
 	if (!devices_info) {
 		ret = -ENOMEM;
 		goto out;
@@ -6067,8 +6066,7 @@ struct btrfs_block_group *btrfs_create_chunk(struct btrfs_trans_handle *trans,
 	ctl.space_info = space_info;
 	init_alloc_chunk_ctl(fs_devices, &ctl);

-	devices_info = kcalloc(fs_devices->rw_devices, sizeof(*devices_info),
-			       GFP_NOFS);
+	devices_info = kzalloc_objs(*devices_info, fs_devices->rw_devices, GFP_NOFS);
 	if (!devices_info)
 		return ERR_PTR(-ENOMEM);

diff --git a/fs/btrfs/zoned.c b/fs/btrfs/zoned.c
index ab330ec957bc..851b0de7bed7 100644
--- a/fs/btrfs/zoned.c
+++ b/fs/btrfs/zoned.c
@@ -1697,8 +1697,7 @@ static int btrfs_load_block_group_raid10(struct btrfs_block_group *bg,
 		return -EINVAL;
 	}

-	raid0_allocs = kcalloc(map->num_stripes / map->sub_stripes, sizeof(*raid0_allocs),
-			       GFP_NOFS);
+	raid0_allocs = kzalloc_objs(*raid0_allocs, map->num_stripes / map->sub_stripes, GFP_NOFS);
 	if (!raid0_allocs)
 		return -ENOMEM;

@@ -1916,7 +1915,7 @@ int btrfs_load_block_group_zone_info(struct btrfs_block_group *cache, bool new)

 	cache->physical_map = map;

-	zone_info = kcalloc(map->num_stripes, sizeof(*zone_info), GFP_NOFS);
+	zone_info = kzalloc_objs(*zone_info, map->num_stripes, GFP_NOFS);
 	if (!zone_info) {
 		ret = -ENOMEM;
 		goto out;
--
2.53.0

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH v2] btrfs: replace kcalloc() calls to kzalloc_objs()
  2026-02-24 21:45 [PATCH v2] btrfs: replace kcalloc() calls to kzalloc_objs() Miquel Sabaté Solà
@ 2026-02-27  0:27 ` David Sterba
  2026-02-27  6:47   ` Miquel Sabaté Solà
  0 siblings, 1 reply; 3+ messages in thread
From: David Sterba @ 2026-02-27  0:27 UTC (permalink / raw)
  To: Miquel Sabaté Solà
  Cc: dsterba, clm, naohiro.aota, kees, linux-btrfs, linux-kernel

On Tue, Feb 24, 2026 at 10:45:44PM +0100, Miquel Sabaté Solà wrote:
> Commit 2932ba8d9c99 ("slab: Introduce kmalloc_obj() and family")
> introduced, among many others, the kzalloc_objs() helper, which has some
> benefits over kcalloc(). Namely, internal introspection of the allocated
> type now becomes possible, allowing for future alignment-aware choices
> to be made by the allocator and future hardening work that can be type
> sensitive. Dropping 'sizeof' comes also as a nice side-effect.
> 
> Moreover, this also allows us to be in line with the recent tree-wide
> migration to the kmalloc_obj() and family of helpers. See
> commit 69050f8d6d07 ("treewide: Replace kmalloc with kmalloc_obj for
> non-scalar types").
> 
> Reviewed-by: Kees Cook <kees@kernel.org>
> Signed-off-by: Miquel Sabaté Solà <mssola@mssola.com>

Added to for-next, thanks.

> -	buf = kcalloc(map->num_stripes, sizeof(u64), GFP_NOFS);
> +	buf = kzalloc_objs(*buf, map->num_stripes, GFP_NOFS);

> -	pointers = kcalloc(rbio->real_stripes, sizeof(void *), GFP_NOFS);
> -	unmap_array = kcalloc(rbio->real_stripes, sizeof(void *), GFP_NOFS);
> +	pointers = kzalloc_objs(*pointers, rbio->real_stripes, GFP_NOFS);
> +	unmap_array = kzalloc_objs(*unmap_array, rbio->real_stripes, GFP_NOFS);

> -	pointers = kcalloc(rbio->real_stripes, sizeof(void *), GFP_NOFS);
> -	unmap_array = kcalloc(rbio->real_stripes, sizeof(void *), GFP_NOFS);
> +	pointers = kzalloc_objs(*pointers, rbio->real_stripes, GFP_NOFS);
> +	unmap_array = kzalloc_objs(*unmap_array, rbio->real_stripes, GFP_NOFS);

I've changed it to the type in the above cases so it's a direct
conversion that only removes the sizeof(). For the rest there are no
strong preferences so we'll keep it as is, and my preference for new code
is to use the types.

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH v2] btrfs: replace kcalloc() calls to kzalloc_objs()
  2026-02-27  0:27 ` David Sterba
@ 2026-02-27  6:47   ` Miquel Sabaté Solà
  0 siblings, 0 replies; 3+ messages in thread
From: Miquel Sabaté Solà @ 2026-02-27  6:47 UTC (permalink / raw)
  To: David Sterba; +Cc: dsterba, clm, naohiro.aota, kees, linux-btrfs, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 1919 bytes --]

David Sterba @ 2026-02-27 01:27 +01:

> On Tue, Feb 24, 2026 at 10:45:44PM +0100, Miquel Sabaté Solà wrote:
>> Commit 2932ba8d9c99 ("slab: Introduce kmalloc_obj() and family")
>> introduced, among many others, the kzalloc_objs() helper, which has some
>> benefits over kcalloc(). Namely, internal introspection of the allocated
>> type now becomes possible, allowing for future alignment-aware choices
>> to be made by the allocator and future hardening work that can be type
>> sensitive. Dropping 'sizeof' comes also as a nice side-effect.
>>
>> Moreover, this also allows us to be in line with the recent tree-wide
>> migration to the kmalloc_obj() and family of helpers. See
>> commit 69050f8d6d07 ("treewide: Replace kmalloc with kmalloc_obj for
>> non-scalar types").
>>
>> Reviewed-by: Kees Cook <kees@kernel.org>
>> Signed-off-by: Miquel Sabaté Solà <mssola@mssola.com>
>
> Added to for-next, thanks.
>
>> -	buf = kcalloc(map->num_stripes, sizeof(u64), GFP_NOFS);
>> +	buf = kzalloc_objs(*buf, map->num_stripes, GFP_NOFS);
>
>> -	pointers = kcalloc(rbio->real_stripes, sizeof(void *), GFP_NOFS);
>> -	unmap_array = kcalloc(rbio->real_stripes, sizeof(void *), GFP_NOFS);
>> +	pointers = kzalloc_objs(*pointers, rbio->real_stripes, GFP_NOFS);
>> +	unmap_array = kzalloc_objs(*unmap_array, rbio->real_stripes, GFP_NOFS);
>
>> -	pointers = kcalloc(rbio->real_stripes, sizeof(void *), GFP_NOFS);
>> -	unmap_array = kcalloc(rbio->real_stripes, sizeof(void *), GFP_NOFS);
>> +	pointers = kzalloc_objs(*pointers, rbio->real_stripes, GFP_NOFS);
>> +	unmap_array = kzalloc_objs(*unmap_array, rbio->real_stripes, GFP_NOFS);
>
> I've changed it to the type in the above cases so it's a direct
> conversion that only removes the sizeof(). For the rest there are no
> strong preferences so we'll keep it as is, and my preference for new code
> is to use the types.

Got it, thanks!

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 897 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-02-27  6:47 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-02-24 21:45 [PATCH v2] btrfs: replace kcalloc() calls to kzalloc_objs() Miquel Sabaté Solà
2026-02-27  0:27 ` David Sterba
2026-02-27  6:47   ` Miquel Sabaté Solà

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox