On 11/4/2025 7:12 PM, Christoph Hellwig wrote:
On Mon, Nov 03, 2025 at 08:48:29AM -0800, Eric Biggers wrote:
*inode_ret = inode;
- *lblk_num_ret = ((u64)folio->index << (PAGE_SHIFT - inode->i_blkbits)) +
+ *lblk_num_ret = (((u64)folio->index << PAGE_SHIFT) >> inode->i_blkbits)
+
This should be using folio_pos() instead of open coding the arithmetics.
How about this modification: using "<< PAGE_SHIFT" instead of "*
PAGE_SIZE" for page_offset and folio_pos?
--- a/fs/crypto/inline_crypt.c
+++ b/fs/crypto/inline_crypt.c
@@ -333,7 +333,7 @@ static bool bh_get_inode_and_lblk_num(const struct
buffer_head *bh,
inode = mapping->host;
*inode_ret = inode;
- *lblk_num_ret = ((u64)folio->index << (PAGE_SHIFT -
inode->i_blkbits)) +
+ *lblk_num_ret = ((u64)folio_pos(folio) >> inode->i_blkbits) +
(bh_offset(bh) >> inode->i_blkbits);
return true;
}
diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h
index 09b581c1d878..72eeb1841bc3 100644
--- a/include/linux/pagemap.h
+++ b/include/linux/pagemap.h
@@ -1026,7 +1026,7 @@ static inline pgoff_t page_pgoff(const struct
folio *folio,
*/
static inline loff_t folio_pos(const struct folio *folio)
{
- return ((loff_t)folio->index) * PAGE_SIZE;
+ return ((loff_t)folio->index) << PAGE_SHIFT;
}
/*
@@ -1036,7 +1036,7 @@ static inline loff_t page_offset(struct page *page)
{
struct folio *folio = page_folio(page);
- return folio_pos(folio) + folio_page_idx(folio, page) * PAGE_SIZE;
+ return folio_pos(folio) + (folio_page_idx(folio, page) <<
PAGE_SHIFT);
}
Yongpeng,