[PATCH v2 07/10] ceph: remove page remnants from write_folio_nounlock()

From: Tal Zussman

Date: Tue Aug 04 2026 - 14:57:15 EST


Use ceph_folio_start_fscache() and only use a struct page pointer at the
osd_req_op_extent_osd_data_pages() boundary, which requires a page
array. This removes a call to compound_head() in
ceph_set_page_fscache().

This was the last user of ceph_set_page_fscache(), so remove it.

Signed-off-by: Tal Zussman <tz2294@xxxxxxxxxxxx>
---
fs/ceph/addr.c | 18 ++++--------------
1 file changed, 4 insertions(+), 14 deletions(-)

diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c
index a96986c503bf..59e559bdfdff 100644
--- a/fs/ceph/addr.c
+++ b/fs/ceph/addr.c
@@ -558,11 +558,6 @@ static void ceph_folio_start_fscache(struct folio *folio)
folio_start_private_2(folio); /* [DEPRECATED] */
}

-static void ceph_set_page_fscache(struct page *page)
-{
- folio_start_private_2(page_folio(page)); /* [DEPRECATED] */
-}
-
static void ceph_fscache_write_terminated(void *priv, ssize_t error)
{
struct inode *inode = priv;
@@ -584,10 +579,6 @@ static inline void ceph_folio_start_fscache(struct folio *folio)
{
}

-static inline void ceph_set_page_fscache(struct page *page)
-{
-}
-
static inline void ceph_fscache_write_to_cache(struct inode *inode, u64 off, u64 len, bool caching)
{
}
@@ -734,7 +725,7 @@ static u64 get_writepages_data_length(struct inode *inode,
static int write_folio_nounlock(struct folio *folio,
struct writeback_control *wbc)
{
- struct page *page = &folio->page;
+ struct page *page;
struct inode *inode = folio->mapping->host;
struct ceph_inode_info *ci = ceph_inode(inode);
struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode);
@@ -813,7 +804,7 @@ static int write_folio_nounlock(struct folio *folio,

folio_start_writeback(folio);
if (caching)
- ceph_set_page_fscache(&folio->page);
+ ceph_folio_start_fscache(folio);
ceph_fscache_write_to_cache(inode, page_off, len, caching);

if (IS_ENCRYPTED(inode)) {
@@ -833,9 +824,8 @@ static int write_folio_nounlock(struct folio *folio,

/* it may be a short write due to an object boundary */
WARN_ON_ONCE(len > folio_size(folio));
- osd_req_op_extent_osd_data_pages(req, 0,
- bounce_page ? &bounce_page : &page, wlen, 0,
- false, false);
+ page = bounce_page ? bounce_page : &folio->page;
+ osd_req_op_extent_osd_data_pages(req, 0, &page, wlen, 0, false, false);
doutc(cl, "%llx.%llx %llu~%llu (%llu bytes, %sencrypted)\n",
ceph_vinop(inode), page_off, len, wlen,
IS_ENCRYPTED(inode) ? "" : "not ");

--
2.39.5