On Thu, Sep 01, 2022 at 09:55:08AM +0200, Christian König wrote: > Am 01.09.22 um 01:12 schrieb Jason Gunthorpe: > > Used to increment the refcount of the dma buf's struct file, only if the > > refcount is not zero. Useful to allow the struct file's lifetime to > > control the lifetime of the dmabuf while still letting the driver to keep > > track of created dmabufs. > > > > Signed-off-by: Jason Gunthorpe <jgg@xxxxxxxxxx> > > --- > > include/linux/dma-buf.h | 13 +++++++++++++ > > 1 file changed, 13 insertions(+) > > > > diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h > > index 71731796c8c3a8..a35f1554f2fb36 100644 > > --- a/include/linux/dma-buf.h > > +++ b/include/linux/dma-buf.h > > @@ -618,6 +618,19 @@ int dma_buf_fd(struct dma_buf *dmabuf, int flags); > > struct dma_buf *dma_buf_get(int fd); > > void dma_buf_put(struct dma_buf *dmabuf); > > +/** > > + * dma_buf_try_get - try to get a reference on a dmabuf > > + * @dmabuf - the dmabuf to get > > + * > > + * Returns true if a reference was successfully obtained. The caller must > > + * interlock with the dmabuf's release function in some way, such as RCU, to > > + * ensure that this is not called on freed memory. > > I still have a bad feeling about this, but I also see that we can only > choose between evils here. > > Could you just call get_file_rcu() from the exporter with a comment > explaining why this works instead? I guess, are you sure? It seems very hacky. Jason