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

Reply via email to