]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
dm pcache: fix segment info indexing
authorLi Chen <chenl311@chinatelecom.cn>
Fri, 5 Dec 2025 05:46:20 +0000 (05:46 +0000)
committerMikulas Patocka <mpatocka@redhat.com>
Wed, 10 Dec 2025 18:28:23 +0000 (19:28 +0100)
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
drivers/md/dm-pcache/cache_segment.c

index ae57cc261422d8e5e1e70a1d29cb39e75e46e25a..9d92e2b067ed040c4b82e5968dd3b25d24f046b4 100644 (file)
@@ -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);