Commit 13ea55ea authored by Li Chen's avatar Li Chen Committed by Mikulas Patocka
Browse files

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: default avatarLi Chen <chenl311@chinatelecom.cn>
Signed-off-by: default avatarDongsheng Yang <dongsheng.yang@linux.dev>
Signed-off-by: default avatarMikulas Patocka <mpatocka@redhat.com>
Reviewed-by: default avatarZheng Gu <cengku@gmail.com>
Cc: stable@vger.kernel.org	# 6.18
parent ee763317
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -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);