Skip to content

Commit 4377a22

Browse files
Christoph HellwigEric Biggers
authored andcommitted
ext4: use a byte granularity cursor in ext4_mpage_readpages
Replace the next_block variable that is in units of file system blocks and incorrectly uses the sector_t type with a byte offset, as that is what both users want. Signed-off-by: Christoph Hellwig <hch@lst.de> Link: https://lore.kernel.org/r/20260302141922.370070-15-hch@lst.de Signed-off-by: Eric Biggers <ebiggers@kernel.org>
1 parent 5ca1a1f commit 4377a22

1 file changed

Lines changed: 5 additions & 6 deletions

File tree

fs/ext4/readpage.c

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -215,11 +215,11 @@ static int ext4_mpage_readpages(struct inode *inode, struct fsverity_info *vi,
215215
sector_t last_block_in_bio = 0;
216216
const unsigned blkbits = inode->i_blkbits;
217217
const unsigned blocksize = 1 << blkbits;
218-
sector_t next_block;
219218
sector_t block_in_file;
220219
sector_t last_block;
221220
sector_t last_block_in_file;
222221
sector_t first_block;
222+
loff_t pos;
223223
unsigned page_block;
224224
struct block_device *bdev = inode->i_sb->s_bdev;
225225
int length;
@@ -249,7 +249,8 @@ static int ext4_mpage_readpages(struct inode *inode, struct fsverity_info *vi,
249249

250250
blocks_per_folio = folio_size(folio) >> blkbits;
251251
first_hole = blocks_per_folio;
252-
block_in_file = next_block = EXT4_PG_TO_LBLK(inode, folio->index);
252+
pos = folio_pos(folio);
253+
block_in_file = pos >> blkbits;
253254
last_block = EXT4_PG_TO_LBLK(inode, folio->index + nr_pages);
254255
last_block_in_file = (ext4_readpage_limit(inode) +
255256
blocksize - 1) >> blkbits;
@@ -342,8 +343,7 @@ static int ext4_mpage_readpages(struct inode *inode, struct fsverity_info *vi,
342343
* BIO off first?
343344
*/
344345
if (bio && (last_block_in_bio != first_block - 1 ||
345-
!fscrypt_mergeable_bio(bio, inode,
346-
(loff_t)next_block << blkbits))) {
346+
!fscrypt_mergeable_bio(bio, inode, pos))) {
347347
submit_and_realloc:
348348
blk_crypto_submit_bio(bio);
349349
bio = NULL;
@@ -355,8 +355,7 @@ static int ext4_mpage_readpages(struct inode *inode, struct fsverity_info *vi,
355355
*/
356356
bio = bio_alloc(bdev, bio_max_segs(nr_pages),
357357
REQ_OP_READ, GFP_KERNEL);
358-
fscrypt_set_bio_crypt_ctx(bio, inode,
359-
(loff_t)next_block << blkbits, GFP_KERNEL);
358+
fscrypt_set_bio_crypt_ctx(bio, inode, pos, GFP_KERNEL);
360359
ext4_set_bio_post_read_ctx(bio, inode, vi);
361360
bio->bi_iter.bi_sector = first_block << (blkbits - 9);
362361
bio->bi_end_io = mpage_end_io;

0 commit comments

Comments
 (0)