When building for a 32-bit platform (such as ARCH=i386 allmodconfig), there is a modpost error:
ERROR: modpost: "__umoddi3" [drivers/md/dm-pcache/dm-pcache.ko] undefined! Hacking up the driver Makefile to allow building into the kernel shows that the division comes from get_kset_id(), which is inlined into cache_key_append() in cache_key.c. Use the helper div_u64_rem() to avoid emitting a libcall on 32-bit targets. Fixes: fd5cc4922bef ("dm-pcache: add persistent cache target in device-mapper") Signed-off-by: Nathan Chancellor <nat...@kernel.org> --- drivers/md/dm-pcache/cache.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/md/dm-pcache/cache.h b/drivers/md/dm-pcache/cache.h index b3b361cc406e..b10e721ab1b7 100644 --- a/drivers/md/dm-pcache/cache.h +++ b/drivers/md/dm-pcache/cache.h @@ -373,7 +373,9 @@ static inline void *get_key_head_addr(struct pcache_cache *cache) static inline u32 get_kset_id(struct pcache_cache *cache, u64 off) { - return (off >> PCACHE_CACHE_SUBTREE_SIZE_SHIFT) % cache->n_ksets; + u32 rem; + div_u64_rem(off >> PCACHE_CACHE_SUBTREE_SIZE_SHIFT, cache->n_ksets, &rem); + return rem; } static inline struct pcache_cache_kset *get_kset(struct pcache_cache *cache, u32 kset_id) --- base-commit: fd5cc4922bef4b3c3cd0452f38dcfd066322e9a9 change-id: 20250821-dm-pcache-fix-32-bit-div-err-4f0695e94784 Best regards, -- Nathan Chancellor <nat...@kernel.org>