@@ -1356,8 +1356,11 @@ static int ceph_writepages_start(struct address_space *mapping,
memset(data_pages + i, 0,
locked_pages * sizeof(*pages));
} else {
+ struct folio *folio;
+
BUG_ON(num_ops != req->r_num_ops);
- index = pages[i - 1]->index + 1;
+ folio = ceph_fscrypt_pagecache_folio(pages[i - 1]);
+ index = folio->index + 1;
/* request message now owns the pages array */
pages = NULL;
}
@@ -280,6 +280,13 @@ static inline struct page *ceph_fscrypt_pagecache_page(struct page *page)
}
#endif /* CONFIG_FS_ENCRYPTION */
+static inline struct folio *ceph_fscrypt_pagecache_folio(struct page *page)
+{
+ if (fscrypt_is_bounce_page(page))
+ page = fscrypt_pagecache_page(page);
+ return page_folio(page);
+}
+
static inline loff_t ceph_fscrypt_page_offset(struct page *page)
{
return page_offset(ceph_fscrypt_pagecache_page(page));