diff options
| author | Christoph Hellwig <hch@lst.de> | 2026-03-02 17:18:19 +0300 |
|---|---|---|
| committer | Eric Biggers <ebiggers@kernel.org> | 2026-03-09 23:34:21 +0300 |
| commit | 4377a22d84f726f0a650927edf75cdc0698baf06 (patch) | |
| tree | 9bfd386505f9e7a1aeb338679a3a6b3eaf252293 | |
| parent | 5ca1a1f017ea0f0e0bcb6ec52064735f2ac1c393 (diff) | |
| download | linux-4377a22d84f726f0a650927edf75cdc0698baf06.tar.xz | |
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>
| -rw-r--r-- | fs/ext4/readpage.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/fs/ext4/readpage.c b/fs/ext4/readpage.c index fbfa4d830d9a..6ec503bde00b 100644 --- a/fs/ext4/readpage.c +++ b/fs/ext4/readpage.c @@ -215,11 +215,11 @@ static int ext4_mpage_readpages(struct inode *inode, struct fsverity_info *vi, sector_t last_block_in_bio = 0; const unsigned blkbits = inode->i_blkbits; const unsigned blocksize = 1 << blkbits; - sector_t next_block; sector_t block_in_file; sector_t last_block; sector_t last_block_in_file; sector_t first_block; + loff_t pos; unsigned page_block; struct block_device *bdev = inode->i_sb->s_bdev; int length; @@ -249,7 +249,8 @@ static int ext4_mpage_readpages(struct inode *inode, struct fsverity_info *vi, blocks_per_folio = folio_size(folio) >> blkbits; first_hole = blocks_per_folio; - block_in_file = next_block = EXT4_PG_TO_LBLK(inode, folio->index); + pos = folio_pos(folio); + block_in_file = pos >> blkbits; last_block = EXT4_PG_TO_LBLK(inode, folio->index + nr_pages); last_block_in_file = (ext4_readpage_limit(inode) + blocksize - 1) >> blkbits; @@ -342,8 +343,7 @@ static int ext4_mpage_readpages(struct inode *inode, struct fsverity_info *vi, * BIO off first? */ if (bio && (last_block_in_bio != first_block - 1 || - !fscrypt_mergeable_bio(bio, inode, - (loff_t)next_block << blkbits))) { + !fscrypt_mergeable_bio(bio, inode, pos))) { submit_and_realloc: blk_crypto_submit_bio(bio); bio = NULL; @@ -355,8 +355,7 @@ static int ext4_mpage_readpages(struct inode *inode, struct fsverity_info *vi, */ bio = bio_alloc(bdev, bio_max_segs(nr_pages), REQ_OP_READ, GFP_KERNEL); - fscrypt_set_bio_crypt_ctx(bio, inode, - (loff_t)next_block << blkbits, GFP_KERNEL); + fscrypt_set_bio_crypt_ctx(bio, inode, pos, GFP_KERNEL); ext4_set_bio_post_read_ctx(bio, inode, vi); bio->bi_iter.bi_sector = first_block << (blkbits - 9); bio->bi_end_io = mpage_end_io; |
