Re: [PATCH 2/2] md/md-llbitmap: fix percpu_ref not resurrected on suspend timeout

Li Nan <[email protected]>
Newsgroups gmane.linux.block,gmane.linux.raid,gmane.linux.kernel
Message-ID <[email protected]>

在 2026/1/24 2:26, Yu Kuai 写道:
> When llbitmap_suspend_timeout() times out waiting for percpu_ref to
> become zero, it returns -ETIMEDOUT without resurrecting the percpu_ref.
> The caller (md_llbitmap_daemon_fn) then continues to the next page
> without calling llbitmap_resume(), leaving the percpu_ref in a killed
> state permanently.
> 
> Fix this by resurrecting the percpu_ref before returning the error,
> ensuring the page control structure remains usable for subsequent
> operations.
> 
> Fixes: 5ab829f1971d ("md/md-llbitmap: introduce new lockless bitmap")
> Signed-off-by: Yu Kuai <[email protected]>
> ---
>   drivers/md/md-llbitmap.c | 4 +++-
>   1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/md/md-llbitmap.c b/drivers/md/md-llbitmap.c
> index b482a1db0861..7df15756142d 100644
> --- a/drivers/md/md-llbitmap.c
> +++ b/drivers/md/md-llbitmap.c
> @@ -779,8 +779,10 @@ static int llbitmap_suspend_timeout(struct llbitmap *llbitmap, int page_idx)
>   	percpu_ref_kill(&pctl->active);
>   
>   	if (!wait_event_timeout(pctl->wait, percpu_ref_is_zero(&pctl->active),
> -			llbitmap->mddev->bitmap_info.daemon_sleep * HZ))
> +			llbitmap->mddev->bitmap_info.daemon_sleep * HZ)) {
> +		percpu_ref_resurrect(&pctl->active);
>   		return -ETIMEDOUT;
> +	}
>   
>   	return 0;
>   }

LGTM

Reviewed-by: Li Nan <[email protected]>

-- 
Thanks,
Nan
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.