On 6/26/26 14:18, WenTao Liang wrote: > dma_fence_enable_sw_signaling acquires an extra reference on each chain > fence. The error unwind loop calls dma_fence_put only once per > chain/fence without first signaling the fence to trigger the callback > that releases the signaling reference. This prevents the chain fence kref > from reaching 0, permanently leaking the chain and its contained fence. > > Cc: [email protected] > Fixes: dc2f7e67a28a ("dma-buf: Exercise dma-fence-chain under selftests")
Please drop that, this is a minor issue in a unit test and not anything which needs backporting. > Signed-off-by: WenTao Liang <[email protected]> > --- > drivers/dma-buf/st-dma-fence-chain.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/drivers/dma-buf/st-dma-fence-chain.c > b/drivers/dma-buf/st-dma-fence-chain.c > index 821023dd34df..7dc18e294387 100644 > --- a/drivers/dma-buf/st-dma-fence-chain.c > +++ b/drivers/dma-buf/st-dma-fence-chain.c > @@ -152,7 +152,10 @@ static int fence_chains_init(struct fence_chains *fc, > unsigned int count, > > unwind: > for (i = 0; i < count; i++) { > - dma_fence_put(fc->fences[i]); > + if (fc->fences[i]) { > + dma_fence_signal(fc->fences[i]); > + dma_fence_put(fc->fences[i]); > + } The usual text book idiom for such cleanup cases is: while (i--) { dma_fence_signal(fc->fences[i]); dma_fence_put(fc->chains[i]); } Additional to that we need a different error handling target for the case that the mock_chain() allocation fails (or just do another dma_fence_put there). Regards, Christian. > dma_fence_put(fc->chains[i]); > } > kvfree(fc->fences);
