Commit 4377a22d authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Eric Biggers
Browse files

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: default avatarChristoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20260302141922.370070-15-hch@lst.de


Signed-off-by: default avatarEric Biggers <ebiggers@kernel.org>
parent 5ca1a1f0
Loading
Loading
Loading
Loading
+5 −6
Original line number Diff line number Diff line
@@ -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;