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>


Reply via email to