[PATCH] fs/erofs: Fix build for m68k
Kuan-Wei Chiu
visitorckw at gmail.com
Sat Apr 25 18:12:27 CEST 2026
Hi Daniel,
On Sun, Apr 19, 2026 at 07:01:23PM +0900, Daniel Palmer wrote:
> Currently the use of roundup() causes GCC to emit a reference
> to __udivdi3() on m68k and we don't have that:
>
> /usr/bin/m68k-linux-gnu-ld.bfd: fs/erofs/data.o: in function `erofs_map_blocks':
> u-boot/fs/erofs/data.c:81:(.text.erofs_map_blocks+0x126): undefined reference to `__udivdi3'
> /usr/bin/m68k-linux-gnu-ld.bfd: u-boot/fs/erofs/data.c:81:(.text.erofs_map_blocks+0x458): undefined reference to `__udivdi3'
>
> We could add it but since unit is 4 or 8 we can actually just
> switch the code to use round_up() instead and not output
> __udivdi3() in the first place.
>
> Signed-off-by: Daniel Palmer <daniel at thingy.jp>
> ---
> fs/erofs/data.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/fs/erofs/data.c b/fs/erofs/data.c
> index b58ec6fcc666..95873846f62d 100644
> --- a/fs/erofs/data.c
> +++ b/fs/erofs/data.c
> @@ -78,7 +78,7 @@ int erofs_map_blocks(struct erofs_inode *inode,
> unit = EROFS_BLOCK_MAP_ENTRY_SIZE; /* block map */
>
> chunknr = map->m_la >> vi->u.chunkbits;
> - pos = roundup(iloc(vi->nid) + vi->inode_isize +
> + pos = round_up(iloc(vi->nid) + vi->inode_isize +
> vi->xattr_isize, unit) + unit * chunknr;
Since round_up(x, y) requires y to be a power of two, I was wondering
if it might be worth adding an assertion here to ensure this?
Additionally, a bit further down in erofs_map_blocks(), there is
another instance where roundup() is used. I haven't checked the
generated assembly, but I'm guessing it didn't fail because gcc was
smart enough to optimize it into a right shift? Since erofs_blksiz() is
defined as (1u << sbi.blkszbits), it is also guaranteed to be a power
of two. Perhaps we should replace that one with round_up() as well, for
safety and consistency?
Regards,
Kuan-Wei
>
> err = erofs_blk_read(buf, erofs_blknr(pos), 1);
> --
> 2.53.0
>
More information about the U-Boot
mailing list