| Message ID | 20251025032221.2905818-17-libaokun@huaweicloud.com |
|---|---|
| State | Superseded |
| Headers | show |
| Series | ext4: enable block size larger than page size | expand |
On Sat 25-10-25 11:22:12, libaokun@huaweicloud.com wrote: > From: Baokun Li <libaokun1@huawei.com> > > Use the EXT4_P_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> Looks good. Feel free to add: Reviewed-by: Jan Kara <jack@suse.cz> Honza > --- > fs/ext4/readpage.c | 7 ++----- > 1 file changed, 2 insertions(+), 5 deletions(-) > > diff --git a/fs/ext4/readpage.c b/fs/ext4/readpage.c > index f329daf6e5c7..8c8ec9d60b90 100644 > --- a/fs/ext4/readpage.c > +++ b/fs/ext4/readpage.c > @@ -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_P_TO_LBLK(inode, folio->index); > + last_block = EXT4_P_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) > -- > 2.46.1 >
diff --git a/fs/ext4/readpage.c b/fs/ext4/readpage.c index f329daf6e5c7..8c8ec9d60b90 100644 --- a/fs/ext4/readpage.c +++ b/fs/ext4/readpage.c @@ -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_P_TO_LBLK(inode, folio->index); + last_block = EXT4_P_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)