mm/filemap: Add folio private_2 functions

end_page_private_2() becomes folio_end_private_2(),
wait_on_page_private_2() becomes folio_wait_private_2() and
wait_on_page_private_2_killable() becomes folio_wait_private_2_killable().

Adjust the fscache equivalents to call page_folio() before calling these
functions to avoid adding wrappers.  Ends up costing 1 byte of text
in ceph & netfs, but the core shrinks by three calls to page_folio().
Signed-off-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
Reviewed-by: default avatarWilliam Kucharski <william.kucharski@oracle.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarDavid Howells <dhowells@redhat.com>
Acked-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
parent df4d4f12
...@@ -55,7 +55,7 @@ static inline void set_page_fscache(struct page *page) ...@@ -55,7 +55,7 @@ static inline void set_page_fscache(struct page *page)
*/ */
static inline void end_page_fscache(struct page *page) static inline void end_page_fscache(struct page *page)
{ {
end_page_private_2(page); folio_end_private_2(page_folio(page));
} }
/** /**
...@@ -66,7 +66,7 @@ static inline void end_page_fscache(struct page *page) ...@@ -66,7 +66,7 @@ static inline void end_page_fscache(struct page *page)
*/ */
static inline void wait_on_page_fscache(struct page *page) static inline void wait_on_page_fscache(struct page *page)
{ {
wait_on_page_private_2(page); folio_wait_private_2(page_folio(page));
} }
/** /**
...@@ -82,7 +82,7 @@ static inline void wait_on_page_fscache(struct page *page) ...@@ -82,7 +82,7 @@ static inline void wait_on_page_fscache(struct page *page)
*/ */
static inline int wait_on_page_fscache_killable(struct page *page) static inline int wait_on_page_fscache_killable(struct page *page)
{ {
return wait_on_page_private_2_killable(page); return folio_wait_private_2_killable(page_folio(page));
} }
enum netfs_read_source { enum netfs_read_source {
......
...@@ -795,9 +795,9 @@ static inline void set_page_private_2(struct page *page) ...@@ -795,9 +795,9 @@ static inline void set_page_private_2(struct page *page)
SetPagePrivate2(page); SetPagePrivate2(page);
} }
void end_page_private_2(struct page *page); void folio_end_private_2(struct folio *folio);
void wait_on_page_private_2(struct page *page); void folio_wait_private_2(struct folio *folio);
int wait_on_page_private_2_killable(struct page *page); int folio_wait_private_2_killable(struct folio *folio);
/* /*
* Add an arbitrary waiter to a page's wait queue * Add an arbitrary waiter to a page's wait queue
......
...@@ -1506,56 +1506,51 @@ void folio_unlock(struct folio *folio) ...@@ -1506,56 +1506,51 @@ void folio_unlock(struct folio *folio)
EXPORT_SYMBOL(folio_unlock); EXPORT_SYMBOL(folio_unlock);
/** /**
* end_page_private_2 - Clear PG_private_2 and release any waiters * folio_end_private_2 - Clear PG_private_2 and wake any waiters.
* @page: The page * @folio: The folio.
* *
* Clear the PG_private_2 bit on a page and wake up any sleepers waiting for * Clear the PG_private_2 bit on a folio and wake up any sleepers waiting for
* this. The page ref held for PG_private_2 being set is released. * it. The folio reference held for PG_private_2 being set is released.
* *
* This is, for example, used when a netfs page is being written to a local * This is, for example, used when a netfs folio is being written to a local
* disk cache, thereby allowing writes to the cache for the same page to be * disk cache, thereby allowing writes to the cache for the same folio to be
* serialised. * serialised.
*/ */
void end_page_private_2(struct page *page) void folio_end_private_2(struct folio *folio)
{ {
struct folio *folio = page_folio(page);
VM_BUG_ON_FOLIO(!folio_test_private_2(folio), folio); VM_BUG_ON_FOLIO(!folio_test_private_2(folio), folio);
clear_bit_unlock(PG_private_2, folio_flags(folio, 0)); clear_bit_unlock(PG_private_2, folio_flags(folio, 0));
folio_wake_bit(folio, PG_private_2); folio_wake_bit(folio, PG_private_2);
folio_put(folio); folio_put(folio);
} }
EXPORT_SYMBOL(end_page_private_2); EXPORT_SYMBOL(folio_end_private_2);
/** /**
* wait_on_page_private_2 - Wait for PG_private_2 to be cleared on a page * folio_wait_private_2 - Wait for PG_private_2 to be cleared on a folio.
* @page: The page to wait on * @folio: The folio to wait on.
* *
* Wait for PG_private_2 (aka PG_fscache) to be cleared on a page. * Wait for PG_private_2 (aka PG_fscache) to be cleared on a folio.
*/ */
void wait_on_page_private_2(struct page *page) void folio_wait_private_2(struct folio *folio)
{ {
struct folio *folio = page_folio(page);
while (folio_test_private_2(folio)) while (folio_test_private_2(folio))
folio_wait_bit(folio, PG_private_2); folio_wait_bit(folio, PG_private_2);
} }
EXPORT_SYMBOL(wait_on_page_private_2); EXPORT_SYMBOL(folio_wait_private_2);
/** /**
* wait_on_page_private_2_killable - Wait for PG_private_2 to be cleared on a page * folio_wait_private_2_killable - Wait for PG_private_2 to be cleared on a folio.
* @page: The page to wait on * @folio: The folio to wait on.
* *
* Wait for PG_private_2 (aka PG_fscache) to be cleared on a page or until a * Wait for PG_private_2 (aka PG_fscache) to be cleared on a folio or until a
* fatal signal is received by the calling task. * fatal signal is received by the calling task.
* *
* Return: * Return:
* - 0 if successful. * - 0 if successful.
* - -EINTR if a fatal signal was encountered. * - -EINTR if a fatal signal was encountered.
*/ */
int wait_on_page_private_2_killable(struct page *page) int folio_wait_private_2_killable(struct folio *folio)
{ {
struct folio *folio = page_folio(page);
int ret = 0; int ret = 0;
while (folio_test_private_2(folio)) { while (folio_test_private_2(folio)) {
...@@ -1566,7 +1561,7 @@ int wait_on_page_private_2_killable(struct page *page) ...@@ -1566,7 +1561,7 @@ int wait_on_page_private_2_killable(struct page *page)
return ret; return ret;
} }
EXPORT_SYMBOL(wait_on_page_private_2_killable); EXPORT_SYMBOL(folio_wait_private_2_killable);
/** /**
* folio_end_writeback - End writeback against a folio. * folio_end_writeback - End writeback against a folio.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment