mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 18:13:41 +02:00
dm pcache: fix cache info indexing
The on-media cache_info index used sizeof(struct) instead of the 4K metadata stride, so gc_percent updates from dmsetup message were written between slots and lost after reboot. Use PCACHE_CACHE_INFO_SIZE in get_cache_info_addr() and align info_index with the slot returned by pcache_meta_find_latest(). Signed-off-by: Li Chen <chenl311@chinatelecom.cn> Signed-off-by: Dongsheng Yang <dongsheng.yang@linux.dev> Signed-off-by: Mikulas Patocka <mpatocka@redhat.com> Reviewed-by: Zheng Gu <cengku@gmail.com> Cc: stable@vger.kernel.org # 6.18
This commit is contained in:
parent
ebbb90344a
commit
ee76331783
|
|
@ -10,7 +10,8 @@ struct kmem_cache *key_cache;
|
|||
|
||||
static inline struct pcache_cache_info *get_cache_info_addr(struct pcache_cache *cache)
|
||||
{
|
||||
return cache->cache_info_addr + cache->info_index;
|
||||
return (struct pcache_cache_info *)((char *)cache->cache_info_addr +
|
||||
(size_t)cache->info_index * PCACHE_CACHE_INFO_SIZE);
|
||||
}
|
||||
|
||||
static void cache_info_write(struct pcache_cache *cache)
|
||||
|
|
@ -49,6 +50,8 @@ static int cache_info_init(struct pcache_cache *cache, struct pcache_cache_optio
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
cache->info_index = ((char *)cache_info_addr - (char *)cache->cache_info_addr) / PCACHE_CACHE_INFO_SIZE;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user