md: cleanup mddev_create/destroy_serial_pool()
authorYu Kuai <yukuai3@huawei.com>
Tue, 10 Oct 2023 15:19:53 +0000 (23:19 +0800)
committerSong Liu <song@kernel.org>
Wed, 11 Oct 2023 01:49:51 +0000 (18:49 -0700)
Now that except for stopping the array, all the callers already suspend
the array, there is no need to suspend anymore, hence remove the second
parameter.

Signed-off-by: Yu Kuai <yukuai3@huawei.com>
Signed-off-by: Song Liu <song@kernel.org>
Link: https://lore.kernel.org/r/20231010151958.145896-15-yukuai1@huaweicloud.com
drivers/md/md-bitmap.c
drivers/md/md.c
drivers/md/md.h

index b3d701c5c461f800fd9b24ccb02b1d90a5654bd2..9672f75c30503cefc197ed0c3234d7a254b9fbe4 100644 (file)
@@ -1861,7 +1861,7 @@ void md_bitmap_destroy(struct mddev *mddev)
 
        md_bitmap_wait_behind_writes(mddev);
        if (!mddev->serialize_policy)
-               mddev_destroy_serial_pool(mddev, NULL, true);
+               mddev_destroy_serial_pool(mddev, NULL);
 
        mutex_lock(&mddev->bitmap_info.mutex);
        spin_lock(&mddev->lock);
@@ -1977,7 +1977,7 @@ int md_bitmap_load(struct mddev *mddev)
                goto out;
 
        rdev_for_each(rdev, mddev)
-               mddev_create_serial_pool(mddev, rdev, true);
+               mddev_create_serial_pool(mddev, rdev);
 
        if (mddev_is_clustered(mddev))
                md_cluster_ops->load_bitmaps(mddev, mddev->bitmap_info.nodes);
@@ -2562,11 +2562,11 @@ backlog_store(struct mddev *mddev, const char *buf, size_t len)
        if (!backlog && mddev->serial_info_pool) {
                /* serial_info_pool is not needed if backlog is zero */
                if (!mddev->serialize_policy)
-                       mddev_destroy_serial_pool(mddev, NULL, true);
+                       mddev_destroy_serial_pool(mddev, NULL);
        } else if (backlog && !mddev->serial_info_pool) {
                /* serial_info_pool is needed since backlog is not zero */
                rdev_for_each(rdev, mddev)
-                       mddev_create_serial_pool(mddev, rdev, true);
+                       mddev_create_serial_pool(mddev, rdev);
        }
        if (old_mwb != backlog)
                md_bitmap_update_sb(mddev->bitmap);
index 85e263376be9c054d7e3a685ddf276db82d7c1af..77ba8b265e16ca4c9b70648b82f42a1028f989a2 100644 (file)
@@ -206,8 +206,7 @@ static int rdev_need_serial(struct md_rdev *rdev)
  * 1. rdev is the first device which return true from rdev_enable_serial.
  * 2. rdev is NULL, means we want to enable serialization for all rdevs.
  */
-void mddev_create_serial_pool(struct mddev *mddev, struct md_rdev *rdev,
-                             bool is_suspend)
+void mddev_create_serial_pool(struct mddev *mddev, struct md_rdev *rdev)
 {
        int ret = 0;
 
@@ -215,15 +214,12 @@ void mddev_create_serial_pool(struct mddev *mddev, struct md_rdev *rdev,
            !test_bit(CollisionCheck, &rdev->flags))
                return;
 
-       if (!is_suspend)
-               mddev_suspend(mddev);
-
        if (!rdev)
                ret = rdevs_init_serial(mddev);
        else
                ret = rdev_init_serial(rdev);
        if (ret)
-               goto abort;
+               return;
 
        if (mddev->serial_info_pool == NULL) {
                /*
@@ -238,10 +234,6 @@ void mddev_create_serial_pool(struct mddev *mddev, struct md_rdev *rdev,
                        pr_err("can't alloc memory pool for serialization\n");
                }
        }
-
-abort:
-       if (!is_suspend)
-               mddev_resume(mddev);
 }
 
 /*
@@ -250,8 +242,7 @@ abort:
  * 2. when bitmap is destroyed while policy is not enabled.
  * 3. for disable policy, the pool is destroyed only when no rdev needs it.
  */
-void mddev_destroy_serial_pool(struct mddev *mddev, struct md_rdev *rdev,
-                              bool is_suspend)
+void mddev_destroy_serial_pool(struct mddev *mddev, struct md_rdev *rdev)
 {
        if (rdev && !test_bit(CollisionCheck, &rdev->flags))
                return;
@@ -260,8 +251,6 @@ void mddev_destroy_serial_pool(struct mddev *mddev, struct md_rdev *rdev,
                struct md_rdev *temp;
                int num = 0; /* used to track if other rdevs need the pool */
 
-               if (!is_suspend)
-                       mddev_suspend(mddev);
                rdev_for_each(temp, mddev) {
                        if (!rdev) {
                                if (!mddev->serialize_policy ||
@@ -283,8 +272,6 @@ void mddev_destroy_serial_pool(struct mddev *mddev, struct md_rdev *rdev,
                        mempool_destroy(mddev->serial_info_pool);
                        mddev->serial_info_pool = NULL;
                }
-               if (!is_suspend)
-                       mddev_resume(mddev);
        }
 }
 
@@ -2557,7 +2544,7 @@ static int bind_rdev_to_array(struct md_rdev *rdev, struct mddev *mddev)
        pr_debug("md: bind<%s>\n", b);
 
        if (mddev->raid_disks)
-               mddev_create_serial_pool(mddev, rdev, true);
+               mddev_create_serial_pool(mddev, rdev);
 
        if ((err = kobject_add(&rdev->kobj, &mddev->kobj, "dev-%s", b)))
                goto fail;
@@ -2610,7 +2597,7 @@ static void md_kick_rdev_from_array(struct md_rdev *rdev)
        bd_unlink_disk_holder(rdev->bdev, rdev->mddev->gendisk);
        list_del_rcu(&rdev->same_set);
        pr_debug("md: unbind<%pg>\n", rdev->bdev);
-       mddev_destroy_serial_pool(rdev->mddev, rdev, false);
+       mddev_destroy_serial_pool(rdev->mddev, rdev);
        rdev->mddev = NULL;
        sysfs_remove_link(&rdev->kobj, "block");
        sysfs_put(rdev->sysfs_state);
@@ -3077,11 +3064,11 @@ state_store(struct md_rdev *rdev, const char *buf, size_t len)
                }
        } else if (cmd_match(buf, "writemostly")) {
                set_bit(WriteMostly, &rdev->flags);
-               mddev_create_serial_pool(rdev->mddev, rdev, true);
+               mddev_create_serial_pool(rdev->mddev, rdev);
                need_update_sb = true;
                err = 0;
        } else if (cmd_match(buf, "-writemostly")) {
-               mddev_destroy_serial_pool(rdev->mddev, rdev, true);
+               mddev_destroy_serial_pool(rdev->mddev, rdev);
                clear_bit(WriteMostly, &rdev->flags);
                need_update_sb = true;
                err = 0;
@@ -5591,9 +5578,9 @@ serialize_policy_store(struct mddev *mddev, const char *buf, size_t len)
        }
 
        if (value)
-               mddev_create_serial_pool(mddev, NULL, true);
+               mddev_create_serial_pool(mddev, NULL);
        else
-               mddev_destroy_serial_pool(mddev, NULL, true);
+               mddev_destroy_serial_pool(mddev, NULL);
        mddev->serialize_policy = value;
 unlock:
        mddev_unlock_and_resume(mddev);
@@ -6359,7 +6346,7 @@ static void __md_stop_writes(struct mddev *mddev)
        }
        /* disable policy to guarantee rdevs free resources for serialization */
        mddev->serialize_policy = 0;
-       mddev_destroy_serial_pool(mddev, NULL, true);
+       mddev_destroy_serial_pool(mddev, NULL);
 }
 
 void md_stop_writes(struct mddev *mddev)
index 5c8f3f045e78cb3d117620c4b7a59bb1f7943936..63b4c393b1ee8c7350d7891b02da1cbf7393125a 100644 (file)
@@ -817,10 +817,9 @@ extern void __mddev_resume(struct mddev *mddev);
 
 extern void md_reload_sb(struct mddev *mddev, int raid_disk);
 extern void md_update_sb(struct mddev *mddev, int force);
-extern void mddev_create_serial_pool(struct mddev *mddev, struct md_rdev *rdev,
-                                    bool is_suspend);
-extern void mddev_destroy_serial_pool(struct mddev *mddev, struct md_rdev *rdev,
-                                     bool is_suspend);
+extern void mddev_create_serial_pool(struct mddev *mddev, struct md_rdev *rdev);
+extern void mddev_destroy_serial_pool(struct mddev *mddev,
+                                     struct md_rdev *rdev);
 struct md_rdev *md_find_rdev_nr_rcu(struct mddev *mddev, int nr);
 struct md_rdev *md_find_rdev_rcu(struct mddev *mddev, dev_t dev);