Messages in this thread | | | Date | Mon, 10 Jul 2023 19:06:29 +0200 | From | David Sterba <> | Subject | Re: [PATCH 2/2] btrfs: fix 64-bit division link failure |
| |
On Wed, Jul 05, 2023 at 04:01:09PM +0200, Arnd Bergmann wrote: > From: Arnd Bergmann <arnd@arndb.de> > > 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.
| |