Re: [PATCH] md/raid1: change r1conf->r1bio_pool to a pointer type

From: Wang Jinchao
Date: Sun Jun 22 2025 - 23:18:22 EST


On 6/18/25 19:41, Wang Jinchao wrote:
In raid1_reshape(), newpool is a stack variable.
mempool_init() initializes newpool->wait with the stack address.
After assigning newpool to conf->r1bio_pool, the wait queue
need to be reinitialized, which is not ideal.

Change raid1_conf->r1bio_pool to a pointer type and
replace mempool_init() with mempool_create() to
avoid referencing a stack-based wait queue.



Can you also switch to kmalloc pool in this patch?

Thanks,
Kuai

Hi Kuai,

Comparing mempool_create_kmalloc_pool() and mempool_create(), the former requires the pool element size as a parameter, while the latter uses r1bio_pool_alloc() to allocate new elements, with the size calculated based on poolinfo->raid_disks.
The key point is poolinfo, which is used for both r1bio_pool and r1buf_pool.
If we change from mempool_create() to mempool_create_kmalloc_pool(), we would need to introduce a new concept, such as r1bio_pool_size, and store it somewhere. In this case, the original conf->poolinfo would lose its meaning and become just r1buf_poolinfo.
So I think keeping poolinfo is a better fit for the pool in RAID1.

By the way, I did not receive your email in my Gmail inbox; I found your message on lore.org. The last email I received from you was on June 16, so I am not sure what the problem is.
I also sent you an email mentioning that not using poolinfo makes rollback in raid1_reshape more difficult.
I wonder whether you received it, or maybe I missed your reply.

I am looking forward to your discussion. I want to gain a deeper understanding and contribute more to md/raid.

Thanks.