Commit 9184a307 authored by Matthew Wilcox (Oracle)'s avatar Matthew Wilcox (Oracle)
Browse files

filemap: Use folios in next_uptodate_page



This saves 105 bytes of text.

Signed-off-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarWilliam Kucharski <william.kucharski@oracle.com>
parent 1afd7ae5
Loading
Loading
Loading
Loading
+15 −15
Original line number Diff line number Diff line
@@ -3227,43 +3227,43 @@ static bool filemap_map_pmd(struct vm_fault *vmf, struct page *page)
	return false;
}

static struct page *next_uptodate_page(struct page *page,
static struct page *next_uptodate_page(struct folio *folio,
				       struct address_space *mapping,
				       struct xa_state *xas, pgoff_t end_pgoff)
{
	unsigned long max_idx;

	do {
		if (!page)
		if (!folio)
			return NULL;
		if (xas_retry(xas, page))
		if (xas_retry(xas, folio))
			continue;
		if (xa_is_value(page))
		if (xa_is_value(folio))
			continue;
		if (PageLocked(page))
		if (folio_test_locked(folio))
			continue;
		if (!page_cache_get_speculative(page))
		if (!folio_try_get_rcu(folio))
			continue;
		/* Has the page moved or been split? */
		if (unlikely(page != xas_reload(xas)))
		if (unlikely(folio != xas_reload(xas)))
			goto skip;
		if (!PageUptodate(page) || PageReadahead(page))
		if (!folio_test_uptodate(folio) || folio_test_readahead(folio))
			goto skip;
		if (!trylock_page(page))
		if (!folio_trylock(folio))
			goto skip;
		if (page->mapping != mapping)
		if (folio->mapping != mapping)
			goto unlock;
		if (!PageUptodate(page))
		if (!folio_test_uptodate(folio))
			goto unlock;
		max_idx = DIV_ROUND_UP(i_size_read(mapping->host), PAGE_SIZE);
		if (xas->xa_index >= max_idx)
			goto unlock;
		return page;
		return &folio->page;
unlock:
		unlock_page(page);
		folio_unlock(folio);
skip:
		put_page(page);
	} while ((page = xas_next_entry(xas, end_pgoff)) != NULL);
		folio_put(folio);
	} while ((folio = xas_next_entry(xas, end_pgoff)) != NULL);

	return NULL;
}