md/raid5: use new apis to suspend array
authorYu Kuai <yukuai3@huawei.com>
Tue, 10 Oct 2023 15:19:48 +0000 (23:19 +0800)
committerSong Liu <song@kernel.org>
Wed, 11 Oct 2023 01:49:50 +0000 (18:49 -0700)
Convert to use new apis, the old apis will be removed eventually.

These are not hot path, so performance is not concerned.

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

index 6383723468e5814c550e51d27d0e39d03091f8d4..e6b8c01456487c385fdf254a03c20ae5c8bceac3 100644 (file)
@@ -7025,7 +7025,7 @@ raid5_store_stripe_size(struct mddev  *mddev, const char *page, size_t len)
                        new != roundup_pow_of_two(new))
                return -EINVAL;
 
-       err = mddev_lock(mddev);
+       err = mddev_suspend_and_lock(mddev);
        if (err)
                return err;
 
@@ -7049,7 +7049,6 @@ raid5_store_stripe_size(struct mddev  *mddev, const char *page, size_t len)
                goto out_unlock;
        }
 
-       mddev_suspend(mddev);
        mutex_lock(&conf->cache_size_mutex);
        size = conf->max_nr_stripes;
 
@@ -7064,10 +7063,9 @@ raid5_store_stripe_size(struct mddev  *mddev, const char *page, size_t len)
                err = -ENOMEM;
        }
        mutex_unlock(&conf->cache_size_mutex);
-       mddev_resume(mddev);
 
 out_unlock:
-       mddev_unlock(mddev);
+       mddev_unlock_and_resume(mddev);
        return err ?: len;
 }
 
@@ -7153,7 +7151,7 @@ raid5_store_skip_copy(struct mddev *mddev, const char *page, size_t len)
                return -EINVAL;
        new = !!new;
 
-       err = mddev_lock(mddev);
+       err = mddev_suspend_and_lock(mddev);
        if (err)
                return err;
        conf = mddev->private;
@@ -7162,15 +7160,13 @@ raid5_store_skip_copy(struct mddev *mddev, const char *page, size_t len)
        else if (new != conf->skip_copy) {
                struct request_queue *q = mddev->queue;
 
-               mddev_suspend(mddev);
                conf->skip_copy = new;
                if (new)
                        blk_queue_flag_set(QUEUE_FLAG_STABLE_WRITES, q);
                else
                        blk_queue_flag_clear(QUEUE_FLAG_STABLE_WRITES, q);
-               mddev_resume(mddev);
        }
-       mddev_unlock(mddev);
+       mddev_unlock_and_resume(mddev);
        return err ?: len;
 }
 
@@ -7225,15 +7221,13 @@ raid5_store_group_thread_cnt(struct mddev *mddev, const char *page, size_t len)
        if (new > 8192)
                return -EINVAL;
 
-       err = mddev_lock(mddev);
+       err = mddev_suspend_and_lock(mddev);
        if (err)
                return err;
        conf = mddev->private;
        if (!conf)
                err = -ENODEV;
        else if (new != conf->worker_cnt_per_group) {
-               mddev_suspend(mddev);
-
                old_groups = conf->worker_groups;
                if (old_groups)
                        flush_workqueue(raid5_wq);
@@ -7250,9 +7244,8 @@ raid5_store_group_thread_cnt(struct mddev *mddev, const char *page, size_t len)
                                kfree(old_groups[0].workers);
                        kfree(old_groups);
                }
-               mddev_resume(mddev);
        }
-       mddev_unlock(mddev);
+       mddev_unlock_and_resume(mddev);
 
        return err ?: len;
 }
@@ -8974,12 +8967,12 @@ static int raid5_change_consistency_policy(struct mddev *mddev, const char *buf)
        struct r5conf *conf;
        int err;
 
-       err = mddev_lock(mddev);
+       err = mddev_suspend_and_lock(mddev);
        if (err)
                return err;
        conf = mddev->private;
        if (!conf) {
-               mddev_unlock(mddev);
+               mddev_unlock_and_resume(mddev);
                return -ENODEV;
        }
 
@@ -8989,19 +8982,14 @@ static int raid5_change_consistency_policy(struct mddev *mddev, const char *buf)
                        err = log_init(conf, NULL, true);
                        if (!err) {
                                err = resize_stripes(conf, conf->pool_size);
-                               if (err) {
-                                       mddev_suspend(mddev);
+                               if (err)
                                        log_exit(conf);
-                                       mddev_resume(mddev);
-                               }
                        }
                } else
                        err = -EINVAL;
        } else if (strncmp(buf, "resync", 6) == 0) {
                if (raid5_has_ppl(conf)) {
-                       mddev_suspend(mddev);
                        log_exit(conf);
-                       mddev_resume(mddev);
                        err = resize_stripes(conf, conf->pool_size);
                } else if (test_bit(MD_HAS_JOURNAL, &conf->mddev->flags) &&
                           r5l_log_disk_error(conf)) {
@@ -9014,11 +9002,9 @@ static int raid5_change_consistency_policy(struct mddev *mddev, const char *buf)
                                        break;
                                }
 
-                       if (!journal_dev_exists) {
-                               mddev_suspend(mddev);
+                       if (!journal_dev_exists)
                                clear_bit(MD_HAS_JOURNAL, &mddev->flags);
-                               mddev_resume(mddev);
-                       } else  /* need remove journal device first */
+                       else  /* need remove journal device first */
                                err = -EBUSY;
                } else
                        err = -EINVAL;
@@ -9029,7 +9015,7 @@ static int raid5_change_consistency_policy(struct mddev *mddev, const char *buf)
        if (!err)
                md_update_sb(mddev, 1);
 
-       mddev_unlock(mddev);
+       mddev_unlock_and_resume(mddev);
 
        return err;
 }