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,

Reply via email to