Re: [PATCH 2/2] btrfs: fix 64-bit division link failure

From: David Sterba
Date: Mon Jul 10 2023 - 13:13:10 EST


On Wed, Jul 05, 2023 at 04:01:09PM +0200, Arnd Bergmann wrote:
> From: Arnd Bergmann <arnd@xxxxxxxx>
>
> Some of the recent refactoring of the statfs code apparently
> brought back a link failure on older gcc versions that I had
> fixed before:
>
> arm-linux-gnueabi-ld: fs/btrfs/super.o: in function `btrfs_statfs':
> super.c:(.text+0xec40): undefined reference to `__aeabi_uldivmod'
>
> I think what happened is that gcc is free to not inline a function
> despite the 'inline' annotation, and when this happens it can end
> up partially inlining the div_u64() helper in a way that breaks the
> __builtin_constant_p() based optimization.
>
> I only see this behavior for gcc-9, but it's possible that the same
> thing happens in later versions as well when the code changes again.

This is second fix to work around compiler assumptions and dependency
from other code, somehow this feels like the fix is being done in the
wrong place. Filesystem code using a number division helpers that are
supposed to abstract away 64bit division problems are as far as we
should go. Speculating about partial inlining or working/not-working
constant value detection maybe belongs to some highly optimized code but
not to a plain API usage.