On 2025-11-03 16:26, Jan Kara wrote:
> On Sat 25-10-25 11:22:06, libaokun@huaweicloud.com wrote:
>> From: Baokun Li <libaokun1@huawei.com>
>>
>> As BS > PS support is coming, all block number to page index (and
>> vice-versa) conversions must now go via bytes. Added EXT4_LBLK_TO_P()
>> and EXT4_P_TO_LBLK() macros to simplify these conversions and handle
>> both BS <= PS and BS > PS scenarios cleanly.
>>
>> Signed-off-by: Baokun Li <libaokun1@huawei.com>
>> Reviewed-by: Zhang Yi <yi.zhang@huawei.com>
> 'P' in the macro names seems too terse :). I'd probably use PG to give a
> better hint this is about pages? So EXT4_LBLK_TO_PG() and
> EXT4_PG_TO_LBLK().
Indeed, EXT4_LBLK_TO_PG reads much clearer. I will use it in v2.
> BTW, patch 8 could already use these macros...
>
> Honza
In Patch 8, the conversion is for a physical block number, which has a
different variable type than lblk. Since this is the only location where
this conversion is used in the code, I made a dedicated modification there.
Thank you for your review!
Cheers,
Baokun
>> ---
>> fs/ext4/ext4.h | 6 ++++++
>> 1 file changed, 6 insertions(+)
>>
>> diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
>> index 9b236f620b3a..8223ed29b343 100644
>> --- a/fs/ext4/ext4.h
>> +++ b/fs/ext4/ext4.h
>> @@ -369,6 +369,12 @@ struct ext4_io_submit {
>> (round_up((offset), i_blocksize(inode)) >> (inode)->i_blkbits)
>> #define EXT4_LBLK_TO_B(inode, lblk) ((loff_t)(lblk) << (inode)->i_blkbits)
>>
>> +/* Translate a block number to a page index */
>> +#define EXT4_LBLK_TO_P(inode, lblk) (EXT4_LBLK_TO_B((inode), (lblk)) >> \
>> + PAGE_SHIFT)
>> +/* Translate a page index to a block number */
>> +#define EXT4_P_TO_LBLK(inode, pnum) (((loff_t)(pnum) << PAGE_SHIFT) >> \
>> + (inode)->i_blkbits)
>> /* Translate a block number to a cluster number */
>> #define EXT4_B2C(sbi, blk) ((blk) >> (sbi)->s_cluster_bits)
>> /* Translate a cluster number to a block number */
>> --
>> 2.46.1
>>