David Hildenbrand wrote: > > > -static inline unsigned long dax_folio_share_put(struct folio *folio) > > +static inline unsigned long dax_folio_put(struct folio *folio) > > { > > - return --folio->page.share; > > + unsigned long ref; > > + int order, i; > > + > > + if (!dax_folio_is_shared(folio)) > > + ref = 0; > > + else > > + ref = --folio->share; > > + > > It would still be good to learn how this non-atomic update here is safe > (@Dan?), but that's independent of this series.
Apologies, I missed this question earlier. All these manipulations are happening under xas_lock_irq() for @entry where each @entry is 1:1 correlated with a folio. So concurrent attempts to associate/disassociate a reflinked block in a file should synchronize there. > Staring at it, I would have thought we have to us an atomic_t here. > > Acked-by: David Hildenbrand <da...@redhat.com> Thanks for taking a look!