Commit e28ca92f authored by Yu Kuai's avatar Yu Kuai Committed by Song Liu
Browse files

md/raid5: use new apis to suspend array



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: default avatarYu Kuai <yukuai3@huawei.com>
Signed-off-by: default avatarSong Liu <song@kernel.org>
Link: https://lore.kernel.org/r/20231010151958.145896-10-yukuai1@huaweicloud.com
parent 1b172e0b
Loading
Loading
Loading
Loading
+12 −26
Original line number Diff line number Diff line
@@ -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;
}