Unverified Commit 12851bd9 authored by Matthew Wilcox (Oracle)'s avatar Matthew Wilcox (Oracle) Committed by Christian Brauner
Browse files

fs: Turn page_offset() into a wrapper around folio_pos()



This is far less efficient for the lagging filesystems which still
use page_offset(), but it removes an access to page->index.  It also
fixes a bug -- if any filesystem passed a tail page to page_offset(),
it would return garbage which might result in the filesystem choosing
to not writeback a dirty page.  There probably aren't any examples
of this, but I can't be certain.

Signed-off-by: default avatar"Matthew Wilcox (Oracle)" <willy@infradead.org>
Link: https://lore.kernel.org/r/20250221203932.3588740-1-willy@infradead.org


Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
parent d1c735d4
Loading
Loading
Loading
Loading
+11 −9
Original line number Diff line number Diff line
@@ -1044,21 +1044,23 @@ static inline pgoff_t page_pgoff(const struct folio *folio,
	return folio->index + folio_page_idx(folio, page);
}

/*
 * Return byte-offset into filesystem object for page.
/**
 * folio_pos - Returns the byte position of this folio in its file.
 * @folio: The folio.
 */
static inline loff_t page_offset(struct page *page)
static inline loff_t folio_pos(const struct folio *folio)
{
	return ((loff_t)page->index) << PAGE_SHIFT;
	return ((loff_t)folio->index) * PAGE_SIZE;
}

/**
 * folio_pos - Returns the byte position of this folio in its file.
 * @folio: The folio.
/*
 * Return byte-offset into filesystem object for page.
 */
static inline loff_t folio_pos(struct folio *folio)
static inline loff_t page_offset(struct page *page)
{
	return page_offset(&folio->page);
	struct folio *folio = page_folio(page);

	return folio_pos(folio) + folio_page_idx(folio, page) * PAGE_SIZE;
}

/*