[PATCH] btrfs: use u64 for the page indices in heuristic_collect_sample()

Tal Zussman posted 1 patch 2 weeks, 2 days ago
fs/btrfs/compression.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
[PATCH] btrfs: use u64 for the page indices in heuristic_collect_sample()
Posted by Tal Zussman 2 weeks, 2 days ago
index and index_end are derived from the u64 start and end offsets, and
index is shifted back into a byte offset for offset_in_folio(), which
needs a cast to u64 to be safe on 32-bit. Make them u64 instead so the
cast goes away. They still fit pgoff_t where they are passed to
filemap_get_folio(), as they came from a valid file offset.

Signed-off-by: Tal Zussman <tz2294@columbia.edu>
---
 fs/btrfs/compression.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/fs/btrfs/compression.c b/fs/btrfs/compression.c
index 20169d028961..228d1cdd7c29 100644
--- a/fs/btrfs/compression.c
+++ b/fs/btrfs/compression.c
@@ -1489,7 +1489,7 @@ static void heuristic_collect_sample(struct inode *inode, u64 start, u64 end,
 				     struct heuristic_ws *ws)
 {
 	struct folio *folio;
-	pgoff_t index, index_end;
+	u64 index, index_end;
 	u32 i, curr_sample_pos;
 	u8 *in_data;
 
@@ -1517,7 +1517,7 @@ static void heuristic_collect_sample(struct inode *inode, u64 start, u64 end,
 		folio = filemap_get_folio(inode->i_mapping, index);
 		ASSERT(!IS_ERR(folio));
 		in_data = kmap_local_folio(folio,
-				offset_in_folio(folio, (u64)index << PAGE_SHIFT));
+				offset_in_folio(folio, index << PAGE_SHIFT));
 		/* Handle case where the start is not aligned to PAGE_SIZE */
 		i = start % PAGE_SIZE;
 		while (i < PAGE_SIZE - SAMPLING_READ_SIZE) {

---
base-commit: 0fa0a3b3b2b007ab40e87245152e1328703a317e
change-id: 20260909-btrfs-heuristic-u64-index-cdb994fdf14f

Best regards,
--  
Tal Zussman <tz2294@columbia.edu>
Re: [PATCH] btrfs: use u64 for the page indices in heuristic_collect_sample()
Posted by David Sterba 2 weeks ago
On Wed, Sep 09, 2026 at 01:10:48PM -0400, Tal Zussman wrote:
> index and index_end are derived from the u64 start and end offsets, and
> index is shifted back into a byte offset for offset_in_folio(), which
> needs a cast to u64 to be safe on 32-bit. Make them u64 instead so the
> cast goes away. They still fit pgoff_t where they are passed to
> filemap_get_folio(), as they came from a valid file offset.
> 
> Signed-off-by: Tal Zussman <tz2294@columbia.edu>

Added to for-next, thanks.