]> Gentwo Git Trees - linux/.git/commitdiff
ext4: support large block size in mpage_map_and_submit_buffers()
authorBaokun Li <libaokun1@huawei.com>
Fri, 21 Nov 2025 09:06:48 +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/EXT4_LBLK_TO_PG macros to complete the conversion
between folio indexes and blocks to avoid negative left/right 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-19-libaokun@huaweicloud.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
fs/ext4/inode.c

index 269c1ded169b6778b4edc65862f631fa55de5230..847770f57bfc187e0599a40b96faacf214a87d8d 100644 (file)
@@ -2299,15 +2299,14 @@ static int mpage_map_and_submit_buffers(struct mpage_da_data *mpd)
        struct folio_batch fbatch;
        unsigned nr, i;
        struct inode *inode = mpd->inode;
-       int bpp_bits = PAGE_SHIFT - inode->i_blkbits;
        pgoff_t start, end;
        ext4_lblk_t lblk;
        ext4_fsblk_t pblock;
        int err;
        bool map_bh = false;
 
-       start = mpd->map.m_lblk >> bpp_bits;
-       end = (mpd->map.m_lblk + mpd->map.m_len - 1) >> bpp_bits;
+       start = EXT4_LBLK_TO_PG(inode, mpd->map.m_lblk);
+       end = EXT4_LBLK_TO_PG(inode, mpd->map.m_lblk + mpd->map.m_len - 1);
        pblock = mpd->map.m_pblk;
 
        folio_batch_init(&fbatch);
@@ -2318,7 +2317,7 @@ static int mpage_map_and_submit_buffers(struct mpage_da_data *mpd)
                for (i = 0; i < nr; i++) {
                        struct folio *folio = fbatch.folios[i];
 
-                       lblk = folio->index << bpp_bits;
+                       lblk = EXT4_PG_TO_LBLK(inode, folio->index);
                        err = mpage_process_folio(mpd, folio, &lblk, &pblock,
                                                 &map_bh);
                        /*