在 8/22/2025 4:09 AM, Nathan Chancellor 写道:
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;
}
Hi Nathan,
Thanx for your fix. It looks good to me.
Just one nit about the variable name. I prefer kset_id to rem.
Mikulas, if this looks good to you, could you apply this change to dm-6.18?
Thanx
Dongsheng
diff --git a/drivers/md/dm-pcache/cache.h b/drivers/md/dm-pcache/cache.h
index b3b361cc406e..f005c9d9a7aa 100644
--- a/drivers/md/dm-pcache/cache.h
+++ b/drivers/md/dm-pcache/cache.h
@@ -373,7 +373,11 @@ 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 kset_id;
+
+ div_u64_rem(off >> PCACHE_CACHE_SUBTREE_SIZE_SHIFT,
cache->n_ksets, &kset_id);
+
+ return kset_id;
}
static inline struct pcache_cache_kset *get_kset(struct pcache_cache
*cache, u32 kset_id)
re
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>