From: Guoqing Jiang <guoqing.jiang@xxxxxxxxxxxxxxx> The serial_info_pool is needed if array sets serialize_policy to true, so don't destroy it. Signed-off-by: Guoqing Jiang <guoqing.jiang@xxxxxxxxxxxxxxx> --- drivers/md/md-bitmap.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/drivers/md/md-bitmap.c b/drivers/md/md-bitmap.c index eff297cf5a81..63f819de2361 100644 --- a/drivers/md/md-bitmap.c +++ b/drivers/md/md-bitmap.c @@ -1790,8 +1790,10 @@ void md_bitmap_destroy(struct mddev *mddev) return; md_bitmap_wait_behind_writes(mddev); - mempool_destroy(mddev->serial_info_pool); - mddev->serial_info_pool = NULL; + if (!mddev->serialize_policy) { + mempool_destroy(mddev->serial_info_pool); + mddev->serial_info_pool = NULL; + } mutex_lock(&mddev->bitmap_info.mutex); spin_lock(&mddev->lock); @@ -2477,8 +2479,10 @@ backlog_store(struct mddev *mddev, const char *buf, size_t len) mddev->bitmap_info.max_write_behind = backlog; if (!backlog && mddev->serial_info_pool) { /* serial_info_pool is not needed if backlog is zero */ - mempool_destroy(mddev->serial_info_pool); - mddev->serial_info_pool = NULL; + if (!mddev->serialize_policy) { + mempool_destroy(mddev->serial_info_pool); + mddev->serial_info_pool = NULL; + } } else if (backlog && !mddev->serial_info_pool) { /* serial_info_pool is needed since backlog is not zero */ struct md_rdev *rdev; -- 2.17.1