From 4d26d32fe4dafd29e168addb7c11949a36e7e5f8 Mon Sep 17 00:00:00 2001 From: Guoqing Jiang Date: Mon, 23 Dec 2019 10:48:59 +0100 Subject: [PATCH] md: don't destroy serial_info_pool if serialize_policy is true The serial_info_pool is needed if array sets serialize_policy to true, so don't destroy it. Signed-off-by: Guoqing Jiang Signed-off-by: Song Liu --- 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 212e75dfebb7..92f0d45946e8 100644 --- a/drivers/md/md-bitmap.c +++ b/drivers/md/md-bitmap.c @@ -1789,8 +1789,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); @@ -2476,8 +2478,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;