[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