Re: [PATCH v4 1/2] md/raid5: track disks array size to fix extra_page leak on error paths
From: yu kuai
Date: Fri Sep 04 2026 - 22:35:28 EST
在 2026/8/27 16:03, ghuicao@xxxxxxx 写道:
> From: Cao Guanghui<caoguanghui@xxxxxxxxxx>
>
> free_conf() iterates conf->pool_size entries to free extra_page
> allocations, but pool_size may not reflect the actual size of the
> conf->disks array. Two scenarios cause a mismatch:
>
> 1. setup_conf() early abort: pool_size is 0 (not yet set by
> grow_stripes) but conf->disks has max_disks entries with
> extra_page allocated. The loop iterates 0 times, leaking all
> pages.
>
> 2. resize_stripes() Step 4 failure: conf->disks was replaced with
> a newsize-entry array in Step 3, but pool_size is only updated
> on success. The loop iterates pool_size (old, smaller value)
> times, leaking (newsize - pool_size) pages.
>
> Add a dedicated disks_cnt field to track the actual number of
> entries in conf->disks. Set it immediately after each allocation
> or replacement (in setup_conf and resize_stripes Step 3, where the
> array is safely stalled with no concurrent access), and use it in
> free_conf() instead of pool_size.
>
> This leaves pool_size untouched, preserving the check_reshape()
> retry behavior that depends on pool_size only being updated on
> full success.
>
> Fixes: d7bd398e97f2 ("md/r5cache: handle alloc_page failure")
> Cc:stable@xxxxxxxxxxxxxxx
> Signed-off-by: Cao Guanghui<caoguanghui@xxxxxxxxxx>
> ---
> drivers/md/raid5.c | 4 +++-
> drivers/md/raid5.h | 1 +
> 2 files changed, 4 insertions(+), 1 deletion(-)
Applied v4 to md-7.3.
--
Thanks,
Kuai