[PATCH] btrfs: use u64 for the page indices in heuristic_collect_sample()
From: Tal Zussman
Date: Wed Sep 09 2026 - 15:06:05 EST
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@xxxxxxxxxxxx>
---
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@xxxxxxxxxxxx>