int all_mapped = 1;
        static DEFINE_RATELIMIT_STATE(last_warned, HZ, 1);
 
-       index = block >> (PAGE_SHIFT - bd_inode->i_blkbits);
+       index = ((loff_t)block << bd_inode->i_blkbits) / PAGE_SIZE;
        folio = __filemap_get_folio(bd_mapping, index, FGP_ACCESSED, 0);
        if (IS_ERR(folio))
                goto out;
        struct inode *bd_inode = bdev->bd_inode;
        struct address_space *bd_mapping = bd_inode->i_mapping;
        struct folio_batch fbatch;
-       pgoff_t index = block >> (PAGE_SHIFT - bd_inode->i_blkbits);
+       pgoff_t index = ((loff_t)block << bd_inode->i_blkbits) / PAGE_SIZE;
        pgoff_t end;
        int i, count;
        struct buffer_head *bh;
        struct buffer_head *head;
 
-       end = (block + len - 1) >> (PAGE_SHIFT - bd_inode->i_blkbits);
+       end = ((loff_t)(block + len - 1) << bd_inode->i_blkbits) / PAGE_SIZE;
        folio_batch_init(&fbatch);
        while (filemap_get_folios(bd_mapping, &index, end, &fbatch)) {
                count = folio_batch_count(&fbatch);
                return 0;
 
        length = blocksize - length;
-       iblock = (sector_t)index << (PAGE_SHIFT - inode->i_blkbits);
-       
+       iblock = ((loff_t)index * PAGE_SIZE) >> inode->i_blkbits;
+
        folio = filemap_grab_folio(mapping, index);
        if (IS_ERR(folio))
                return PTR_ERR(folio);