Hi Philipp, Le jeudi 29 octobre 2026 à 13:51 +0100, Philipp Stanner a écrit : > The dma_fence_ops function ops->release() has been deprecated because it > prevents drivers from unloading. f_fs's implementation merely frees the > fence. The dma_fence backend performs this deallocation automatically in > the correct manner if ops->release() is not implemented. > > The backend simultaneously correctly frees struct ffs_dma_fence since > struct dma_fence is its base class.
For context, this .release() callback was added to avoid the implicit free of the base class, which IIRC was a request I got during the review process of this change set. I'm personally fine with the change, but do we need a "keep this field at the top" comment for the base class in the ffs_dma_fence struct? Or what's the policy here? Cheers, -Paul > > Remove ops->release(). > > Signed-off-by: Philipp Stanner <[email protected]> > --- > drivers/usb/gadget/function/f_fs.c | 9 --------- > 1 file changed, 9 deletions(-) > > diff --git a/drivers/usb/gadget/function/f_fs.c > b/drivers/usb/gadget/function/f_fs.c > index c64a268e98a4..e8672b37e890 100644 > --- a/drivers/usb/gadget/function/f_fs.c > +++ b/drivers/usb/gadget/function/f_fs.c > @@ -1479,18 +1479,9 @@ static const char *ffs_dmabuf_get_timeline_name(struct > dma_fence *fence) > return ""; > } > > -static void ffs_dmabuf_fence_release(struct dma_fence *fence) > -{ > - struct ffs_dma_fence *dma_fence = > - container_of(fence, struct ffs_dma_fence, base); > - > - kfree(dma_fence); > -} > - > static const struct dma_fence_ops ffs_dmabuf_fence_ops = { > .get_driver_name = ffs_dmabuf_get_driver_name, > .get_timeline_name = ffs_dmabuf_get_timeline_name, > - .release = ffs_dmabuf_fence_release, > }; > > static int ffs_dma_resv_lock(struct dma_buf *dmabuf, bool nonblock)
