On Thu, Dec 4, 2025 at 10:57 AM Dongsheng Yang <[email protected]> wrote: > > From: Li Chen <[email protected]> > > 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 <[email protected]> > Signed-off-by: Dongsheng Yang <[email protected]> > --- > drivers/md/dm-pcache/cache_segment.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > 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); > > -- > 2.43.0 >
Reviewed-by: Zheng Gu <[email protected]> Regards, Gu
