Re: [PATCH v3 1/3] dmaengine: Fix device kref underflow in dma_chan_put()

"Garg, Shivank" <[email protected]>
Newsgroups org.kernel.vger.dmaengine,org.kernel.vger.linux-kernel,org.kernel.vger.stable
Message-ID <[email protected]>
On Mon, 2026-08-17 at 09:17 -0500, Frank Li wrote:
> [You don't often get email from [email protected]. Learn why this is important at https://aka.ms/LearnAboutSenderIdentification ]
> 
> On Sun, Aug 16, 2026 at 03:49:25PM +0000, Shivank Garg wrote:
> > [You don't often get email from [email protected]. Learn why this is important at https://aka.ms/LearnAboutSenderIdentification ]
> > 
> > dma_chan_get() takes chan->device->ref only on the slow path:
> > 
> >         /* no kref on fast path */
> >         if (chan->client_count) {
> >                 __module_get(owner);
> >                 chan->client_count++;
> >                 return 0;
> >         }
> >         if (!try_module_get(owner))
> >                 return -ENODEV;
> >         ret = kref_get_unless_zero(&chan->device->ref);
> > 
> > dma_chan_put() drops the ref unconditionally, so every fast-path
> > get/put pair drops one extra device reference.
> > 
> > The bug fires when two conditions hold together: a non-private
> > provider has a persistent client holding chan->client_count > 0
> > and another client cycles dmaengine_get()/dmaengine_put().
> > When the kref hits zero, the subsequent dma_find_channel() returns
> > NULL even though the provider module is still loaded.
> > 
> > Fix this by dropping device->ref only on the last put, matching the
> > single slow-path get.
> > 
> > Fixes: 8ad342a86359 ("dmaengine: Add reference counting to dma_device struct")
> > Signed-off-by: Shivank Garg <[email protected]>
> > ---
> 
> Nit: add helper dma_device_get() to match dma_device_put() to make code
> more symmetry.

Ack.

> 
> Reviewed-by: Frank Li <[email protected]>
> 
> 

Thanks for the review.

Best regards,
Shivank
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.