public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] nvdimm: use struct_size for allocation
@ 2026-03-27  2:52 Rosen Penev
  2026-03-27 17:53 ` Alison Schofield
  0 siblings, 1 reply; 2+ messages in thread
From: Rosen Penev @ 2026-03-27  2:52 UTC (permalink / raw)
  To: nvdimm; +Cc: Dan Williams, Vishal Verma, Dave Jiang, Ira Weiny, open list

Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
 drivers/nvdimm/region_devs.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/nvdimm/region_devs.c b/drivers/nvdimm/region_devs.c
index e35c2e18518f..1350a34a34ce 100644
--- a/drivers/nvdimm/region_devs.c
+++ b/drivers/nvdimm/region_devs.c
@@ -104,7 +104,7 @@ static int nd_region_invalidate_memregion(struct nd_region *nd_region)
 
 static int get_flush_data(struct nd_region *nd_region, size_t *size, int *num_flush)
 {
-	size_t flush_data_size = sizeof(void *);
+	size_t flush_data_size = 0;
 	int _num_flush = 0;
 	int i;
 
@@ -117,11 +117,10 @@ static int get_flush_data(struct nd_region *nd_region, size_t *size, int *num_fl
 			return -EBUSY;
 
 		/* at least one null hint slot per-dimm for the "no-hint" case */
-		flush_data_size += sizeof(void *);
 		_num_flush = min_not_zero(_num_flush, nvdimm->num_flush);
 		if (!nvdimm->num_flush)
 			continue;
-		flush_data_size += nvdimm->num_flush * sizeof(void *);
+		flush_data_size += nvdimm->num_flush;
 	}
 
 	*size = flush_data_size;
@@ -145,7 +144,7 @@ int nd_region_activate(struct nd_region *nd_region)
 	if (rc)
 		return rc;
 
-	ndrd = devm_kzalloc(dev, sizeof(*ndrd) + flush_data_size, GFP_KERNEL);
+	ndrd = devm_kzalloc(dev, struct_size(ndrd, flush_wpq, flush_data_size), GFP_KERNEL);
 	if (!ndrd)
 		return -ENOMEM;
 	dev_set_drvdata(dev, ndrd);
-- 
2.53.0


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

* Re: [PATCH] nvdimm: use struct_size for allocation
  2026-03-27  2:52 [PATCH] nvdimm: use struct_size for allocation Rosen Penev
@ 2026-03-27 17:53 ` Alison Schofield
  0 siblings, 0 replies; 2+ messages in thread
From: Alison Schofield @ 2026-03-27 17:53 UTC (permalink / raw)
  To: Rosen Penev
  Cc: nvdimm, Dan Williams, Vishal Verma, Dave Jiang, Ira Weiny,
	open list

On Thu, Mar 26, 2026 at 07:52:51PM -0700, Rosen Penev wrote:

> Signed-off-by: Rosen Penev <rosenp@gmail.com>

This is not a mechanical struct_size() conversion. It changes the
allocation math for flush_wpq but there is no commit log explanation
of why that change is correct or safe. There's no commit log at all.

This code in not just counting bytes. It encodes assumptions about
the no-hint case and the per-DIMM indexing model. If you intend to
change that, please study those paths and explain why the new math
preserves correctness across all topologies.

> ---
>  drivers/nvdimm/region_devs.c | 7 +++----
>  1 file changed, 3 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/nvdimm/region_devs.c b/drivers/nvdimm/region_devs.c
> index e35c2e18518f..1350a34a34ce 100644
> --- a/drivers/nvdimm/region_devs.c
> +++ b/drivers/nvdimm/region_devs.c
> @@ -104,7 +104,7 @@ static int nd_region_invalidate_memregion(struct nd_region *nd_region)
>  
>  static int get_flush_data(struct nd_region *nd_region, size_t *size, int *num_flush)
>  {
> -	size_t flush_data_size = sizeof(void *);
> +	size_t flush_data_size = 0;
>  	int _num_flush = 0;
>  	int i;
>  
> @@ -117,11 +117,10 @@ static int get_flush_data(struct nd_region *nd_region, size_t *size, int *num_fl
>  			return -EBUSY;
>  
>  		/* at least one null hint slot per-dimm for the "no-hint" case */
> -		flush_data_size += sizeof(void *);
>  		_num_flush = min_not_zero(_num_flush, nvdimm->num_flush);
>  		if (!nvdimm->num_flush)
>  			continue;
> -		flush_data_size += nvdimm->num_flush * sizeof(void *);
> +		flush_data_size += nvdimm->num_flush;
>  	}
>  
>  	*size = flush_data_size;
> @@ -145,7 +144,7 @@ int nd_region_activate(struct nd_region *nd_region)
>  	if (rc)
>  		return rc;
>  
> -	ndrd = devm_kzalloc(dev, sizeof(*ndrd) + flush_data_size, GFP_KERNEL);
> +	ndrd = devm_kzalloc(dev, struct_size(ndrd, flush_wpq, flush_data_size), GFP_KERNEL);
>  	if (!ndrd)
>  		return -ENOMEM;
>  	dev_set_drvdata(dev, ndrd);
> -- 
> 2.53.0
> 
> 

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

end of thread, other threads:[~2026-03-27 17:54 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-27  2:52 [PATCH] nvdimm: use struct_size for allocation Rosen Penev
2026-03-27 17:53 ` Alison Schofield

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