summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorLi Chen <chenl311@chinatelecom.cn>2025-12-05 05:46:20 +0000
committerMikulas Patocka <mpatocka@redhat.com>2025-12-10 19:28:23 +0100
commit13ea55ea20176736516b20b9ea2d8cf97dbe74f5 (patch)
tree44899b460081d619abbeb3bc2d102f7268fc5ab3 /drivers
parentee7633178321f5d983db3adfdea9322456cfdaaa (diff)
dm pcache: fix segment info indexing
Segment info indexing also used sizeof(struct) instead of the 4K metadata stride, so info_index could point between slots and subsequent writes would advance incorrectly. Derive info_index from the pointer returned by the segment meta search using PCACHE_SEG_INFO_SIZE and advance to the next slot for future updates. 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
Diffstat (limited to 'drivers')
-rw-r--r--drivers/md/dm-pcache/cache_segment.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/md/dm-pcache/cache_segment.c b/drivers/md/dm-pcache/cache_segment.c
index ae57cc261422..9d92e2b067ed 100644
--- a/drivers/md/dm-pcache/cache_segment.c
+++ b/drivers/md/dm-pcache/cache_segment.c
@@ -56,7 +56,10 @@ static int cache_seg_info_load(struct pcache_cache_segment *cache_seg)
ret = -EIO;
goto out;
}
- cache_seg->info_index = cache_seg_info_addr - cache_seg_info_addr_base;
+
+ cache_seg->info_index =
+ ((char *)cache_seg_info_addr - (char *)cache_seg_info_addr_base) /
+ PCACHE_SEG_INFO_SIZE;
out:
mutex_unlock(&cache_seg->info_lock);