Skip to content

Commit 207c565

Browse files
YuKuai-huaweiliu-song-6
authored andcommitted
md: factor out helper to start reshape from action_store()
There are no functional changes, just to make code cleaner and prepare for following refactor. Signed-off-by: Yu Kuai <[email protected]> Signed-off-by: Song Liu <[email protected]> Link: https://lore.kernel.org/r/[email protected]
1 parent e792a4c commit 207c565

File tree

1 file changed

+41
-24
lines changed

1 file changed

+41
-24
lines changed

drivers/md/md.c

Lines changed: 41 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5071,6 +5071,45 @@ static void frozen_sync_thread(struct mddev *mddev)
50715071
mutex_unlock(&mddev->sync_mutex);
50725072
}
50735073

5074+
static int mddev_start_reshape(struct mddev *mddev)
5075+
{
5076+
int ret;
5077+
5078+
if (mddev->pers->start_reshape == NULL)
5079+
return -EINVAL;
5080+
5081+
ret = mddev_lock(mddev);
5082+
if (ret)
5083+
return ret;
5084+
5085+
if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery)) {
5086+
mddev_unlock(mddev);
5087+
return -EBUSY;
5088+
}
5089+
5090+
if (mddev->reshape_position == MaxSector ||
5091+
mddev->pers->check_reshape == NULL ||
5092+
mddev->pers->check_reshape(mddev)) {
5093+
clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
5094+
ret = mddev->pers->start_reshape(mddev);
5095+
if (ret) {
5096+
mddev_unlock(mddev);
5097+
return ret;
5098+
}
5099+
} else {
5100+
/*
5101+
* If reshape is still in progress, and md_check_recovery() can
5102+
* continue to reshape, don't restart reshape because data can
5103+
* be corrupted for raid456.
5104+
*/
5105+
clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
5106+
}
5107+
5108+
mddev_unlock(mddev);
5109+
sysfs_notify_dirent_safe(mddev->sysfs_degraded);
5110+
return 0;
5111+
}
5112+
50745113
static ssize_t
50755114
action_store(struct mddev *mddev, const char *page, size_t len)
50765115
{
@@ -5090,32 +5129,10 @@ action_store(struct mddev *mddev, const char *page, size_t len)
50905129
clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
50915130
set_bit(MD_RECOVERY_RECOVER, &mddev->recovery);
50925131
} else if (cmd_match(page, "reshape")) {
5093-
int err;
5094-
if (mddev->pers->start_reshape == NULL)
5095-
return -EINVAL;
5096-
err = mddev_lock(mddev);
5097-
if (!err) {
5098-
if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery)) {
5099-
err = -EBUSY;
5100-
} else if (mddev->reshape_position == MaxSector ||
5101-
mddev->pers->check_reshape == NULL ||
5102-
mddev->pers->check_reshape(mddev)) {
5103-
clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
5104-
err = mddev->pers->start_reshape(mddev);
5105-
} else {
5106-
/*
5107-
* If reshape is still in progress, and
5108-
* md_check_recovery() can continue to reshape,
5109-
* don't restart reshape because data can be
5110-
* corrupted for raid456.
5111-
*/
5112-
clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
5113-
}
5114-
mddev_unlock(mddev);
5115-
}
5132+
int err = mddev_start_reshape(mddev);
5133+
51165134
if (err)
51175135
return err;
5118-
sysfs_notify_dirent_safe(mddev->sysfs_degraded);
51195136
} else {
51205137
if (cmd_match(page, "check"))
51215138
set_bit(MD_RECOVERY_CHECK, &mddev->recovery);

0 commit comments

Comments
 (0)