[PATCH v5 1/2] erofs: avoid hardcoded blocksize for subpage block support

Gao Xiang hsiangkao at linux.alibaba.com
Mon Mar 13 23:07:32 AEDT 2023



On 2023/3/6 18:01, Jingbo Xu wrote:
> As the first step of converting hardcoded blocksize to that specified in
> on-disk superblock, convert all call sites of hardcoded blocksize to
> sb->s_blocksize except for:
> 
> 1) use sbi->blkszbits instead of sb->s_blocksize in
> erofs_superblock_csum_verify() since sb->s_blocksize has not been
> updated with the on-disk blocksize yet when the function is called.
> 
> 2) use inode->i_blkbits instead of sb->s_blocksize in erofs_bread(),
> since the inode operated on may be an anonymous inode in fscache mode.
> Currently the anonymous inode is allocated from an anonymous mount
> maintained in erofs, while in the near future we may allocate anonymous
> inodes from a generic API directly and thus have no access to the
> anonymous inode's i_sb.  Thus we keep the block size in i_blkbits for
> anonymous inodes in fscache mode.
> 
> Be noted that this patch only gets rid of the hardcoded blocksize, in
> preparation for actually setting the on-disk block size in the following
> patch.  The hard limit of constraining the block size to PAGE_SIZE still
> exists until the next patch.
> 
> Signed-off-by: Jingbo Xu <jefflexu at linux.alibaba.com>
> Reviewed-by: Gao Xiang <hsiangkao at linux.alibaba.com>
> ---

...

>   static int erofs_superblock_csum_verify(struct super_block *sb, void *sbdata)
>   {
> +	size_t len = (1 << EROFS_SB(sb)->blkszbits) - EROFS_SUPER_OFFSET;


Here len could be < 0, I think we could calculate crc32 as below:

	size_t len = 1 << EROFS_SB(sb)->blkszbits;

...

	if (len > EROFS_SUPER_OFFSET)             (>= 2k)
		len -= EROFS_SUPER_OFFSET;

Thanks,
Gao Xiang


More information about the Linux-erofs mailing list