On Sat 25-10-25 11:22:13, 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/inode.c | 7 +++----
> 1 file changed, 3 insertions(+), 4 deletions(-)
>
> diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
> index 73c1da90b604..d97ce88d6e0a 100644
> --- a/fs/ext4/inode.c
> +++ b/fs/ext4/inode.c
> @@ -1162,8 +1162,7 @@ int ext4_block_write_begin(handle_t *handle, struct folio *folio,
> unsigned block_start, block_end;
> sector_t block;
> int err = 0;
> - unsigned blocksize = inode->i_sb->s_blocksize;
> - unsigned bbits;
> + unsigned int blocksize = i_blocksize(inode);
> struct buffer_head *bh, *head, *wait[2];
> int nr_wait = 0;
> int i;
> @@ -1172,12 +1171,12 @@ int ext4_block_write_begin(handle_t *handle, struct folio *folio,
> BUG_ON(!folio_test_locked(folio));
> BUG_ON(to > folio_size(folio));
> BUG_ON(from > to);
> + WARN_ON_ONCE(blocksize > folio_size(folio));
>
> head = folio_buffers(folio);
> if (!head)
> head = create_empty_buffers(folio, blocksize, 0);
> - bbits = ilog2(blocksize);
> - block = (sector_t)folio->index << (PAGE_SHIFT - bbits);
> + block = EXT4_P_TO_LBLK(inode, folio->index);
>
> for (bh = head, block_start = 0; bh != head || !block_start;
> block++, block_start = block_end, bh = bh->b_this_page) {
> --
> 2.46.1
>
--
Jan Kara <jack@suse.com>
SUSE Labs, CR