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

Reply via email to