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