]> Gentwo Git Trees - linux/.git/commitdiff
ext4: support large block size in ext4_mpage_readpages()
authorBaokun Li <libaokun1@huawei.com>
Fri, 21 Nov 2025 09:06:46 +0000 (17:06 +0800)
committerTheodore Ts'o <tytso@mit.edu>
Sat, 29 Nov 2025 03:35:27 +0000 (22:35 -0500)
Use the EXT4_PG_TO_LBLK() macro to convert folio indexes to blocks to avoid
negative left shifts after supporting blocksize greater than PAGE_SIZE.

Signed-off-by: Baokun Li <libaokun1@huawei.com>
Reviewed-by: Zhang Yi <yi.zhang@huawei.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Reviewed-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
Message-ID: <20251121090654.631996-17-libaokun@huaweicloud.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
fs/ext4/readpage.c

index f329daf6e5c7343b54c8170602c1da12a6f929a2..e7f2350c725beb024fc3e22ac974074937b0f1dd 100644 (file)
@@ -213,9 +213,7 @@ int ext4_mpage_readpages(struct inode *inode,
 {
        struct bio *bio = NULL;
        sector_t last_block_in_bio = 0;
-
        const unsigned blkbits = inode->i_blkbits;
-       const unsigned blocks_per_page = PAGE_SIZE >> blkbits;
        const unsigned blocksize = 1 << blkbits;
        sector_t next_block;
        sector_t block_in_file;
@@ -251,9 +249,8 @@ int ext4_mpage_readpages(struct inode *inode,
 
                blocks_per_folio = folio_size(folio) >> blkbits;
                first_hole = blocks_per_folio;
-               block_in_file = next_block =
-                       (sector_t)folio->index << (PAGE_SHIFT - blkbits);
-               last_block = block_in_file + nr_pages * blocks_per_page;
+               block_in_file = next_block = EXT4_PG_TO_LBLK(inode, folio->index);
+               last_block = EXT4_PG_TO_LBLK(inode, folio->index + nr_pages);
                last_block_in_file = (ext4_readpage_limit(inode) +
                                      blocksize - 1) >> blkbits;
                if (last_block > last_block_in_file)