On 6/23/25 11:26, Yu Kuai wrote:
Hi,
在 2025/06/23 11:18, Wang Jinchao 写道:
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.
I said multiple times it's a fixed size and won't change, you don't need
to store it. Not sure if you get this. :(
conf->r1bio_pool = mempool_create_kmalloc_pool(NR_RAID_BIOS,
offsetof(struct r1bio, bios[mddev->raid_disks *2]);
Thanks,
Kuai
This time I got it.
I used to think it was a pointer, but now I realize it’s actually a
pointer cast from a fixed value.
I can change it to use mempool_create_kmalloc_pool now.
I will also reconsider your three previous suggestions.
Thanks for your patience.
---
Jinchao