Re: [PATCH v7 04/11] readahead: allocate folios with mapping_min_order in readahead

From: Matthew Wilcox
Date: Wed Jun 12 2024 - 14:51:28 EST


On Fri, Jun 07, 2024 at 02:58:55PM +0000, Pankaj Raghav (Samsung) wrote:
> @@ -230,7 +247,9 @@ void page_cache_ra_unbounded(struct readahead_control *ractl,
> struct folio *folio = xa_load(&mapping->i_pages, index + i);
> int ret;
>
> +

Spurious newline

> if (folio && !xa_is_value(folio)) {
> + long nr_pages = folio_nr_pages(folio);

Hm, but we don't have a reference on this folio. So this isn't safe.

> @@ -240,12 +259,24 @@ void page_cache_ra_unbounded(struct readahead_control *ractl,
> * not worth getting one just for that.
> */
> read_pages(ractl);
> - ractl->_index += folio_nr_pages(folio);
> +
> + /*
> + * Move the ractl->_index by at least min_pages
> + * if the folio got truncated to respect the
> + * alignment constraint in the page cache.
> + *
> + */
> + if (mapping != folio->mapping)
> + nr_pages = min_nrpages;
> +
> + VM_BUG_ON_FOLIO(nr_pages < min_nrpages, folio);
> + ractl->_index += nr_pages;

Why not just:
ractl->_index += min_nrpages;

like you do below?