On Fri, Oct 14, 2022 at 04:59:12PM -0700, Dan Williams wrote: > diff --git a/mm/memremap.c b/mm/memremap.c > index c46e700f5245..368ff41c560b 100644 > --- a/mm/memremap.c > +++ b/mm/memremap.c > @@ -469,8 +469,10 @@ EXPORT_SYMBOL_GPL(get_dev_pagemap); > > void free_zone_device_page(struct page *page) > { > - if (WARN_ON_ONCE(!page->pgmap->ops || !page->pgmap->ops->page_free)) > - return; > + struct dev_pagemap *pgmap = page->pgmap; > + > + /* wake filesystem 'break dax layouts' waiters */ > + wake_up_var(page); Shouldn't this be in the DAX page_free() op? > +/* > + * A symmetric helper to undo the page references acquired by > + * pgmap_request_folios(), but the caller can also just arrange > + * folio_put() on all the folios it acquired previously for the same > + * effect. > + */ > +void pgmap_release_folios(struct folio *folio, int nr_folios) > { > struct folio *iter; > int i; > > - for (iter = folio, i = 0; i < nr_folios; iter = folio_next(iter), i++) { > - if (!put_devmap_managed_page(&iter->page)) > - folio_put(iter); > - if (!folio_ref_count(iter)) > - put_dev_pagemap(pgmap); > - } > + for (iter = folio, i = 0; i < nr_folios; iter = folio_next(folio), i++) > + folio_put(iter); > } Oh, so now this half makes more sense as an API, but It seems like it is not named right, if folio-multiput is useful shouldn't it be a folio_put_many() or something? Jason