Messages in this thread Patch in this message | ![/](/images/icornerl.gif) | | From | Li Zhijian <> | Subject | [PATCH 2/2] cxl/region: Fix missing put_device(region_dev) | Date | Mon, 29 Apr 2024 09:31:54 +0800 |
| |
> mutex_lock(&cxlrd->range_lock); > region_dev = device_find_child(&cxlrd->cxlsd.cxld.dev, hpa, > match_region_by_range); > if (!region_dev) > cxlr = construct_region(cxlrd, cxled); > else > cxlr = to_cxl_region(region_dev); > mutex_unlock(&cxlrd->range_lock); > > rc = PTR_ERR_OR_ZERO(cxlr); > if (rc) > goto out; > > if (!region_dev) > region_dev = &cxlr->dev;
When to_cxl_region(region_dev) fails, put_device(region_dev) should be called to decrease the reference count added by device_find_child().
Simply put_device(region_dev) if region_dev is valid in the error path.
Fixes: a32320b71f08 ("cxl/region: Add region autodiscovery") Signed-off-by: Li Zhijian <lizhijian@fujitsu.com> --- drivers/cxl/core/region.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/cxl/core/region.c b/drivers/cxl/core/region.c index 3c80aa263a65..75390865382f 100644 --- a/drivers/cxl/core/region.c +++ b/drivers/cxl/core/region.c @@ -3117,8 +3117,9 @@ int cxl_add_to_region(struct cxl_port *root, struct cxl_endpoint_decoder *cxled) p->res); } - put_device(region_dev); out: + if (region_dev) + put_device(region_dev); put_device(cxlrd_dev); return rc; } -- 2.29.2
| ![\](/images/icornerr.gif) |