summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLi Nan <linan122@huawei.com>2026-01-05 14:02:55 +0300
committerYu Kuai <yukuai@fnnas.com>2026-01-26 08:16:19 +0300
commitaf9c40ff5aed8149572ae920f520df88356b7950 (patch)
tree9a2f1cb80a5a6fe1f68fb9af205266463d1a8379
parentcc0dab317acb871e11cd83225c90888397043fe8 (diff)
downloadlinux-af9c40ff5aed8149572ae920f520df88356b7950.tar.xz
md: remove MD_RECOVERY_ERROR handling and simplify resync_offset update
Following previous patch "md: update curr_resync_completed even when MD_RECOVERY_INTR is set", 'curr_resync_completed' always equals 'curr_resync' for resync, so MD_RECOVERY_ERROR can be removed. Also, simplify resync_offset update logic. Link: https://lore.kernel.org/linux-raid/20260105110300.1442509-8-linan666@huaweicloud.com Signed-off-by: Li Nan <linan122@huawei.com> Reviewed-by: Yu Kuai <yukuai@fnnas.com> Signed-off-by: Yu Kuai <yukuai@fnnas.com>
-rw-r--r--drivers/md/md.c21
-rw-r--r--drivers/md/md.h2
2 files changed, 4 insertions, 19 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c
index 96f7eadbf959..3ef845af552b 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -9086,7 +9086,6 @@ void md_sync_error(struct mddev *mddev)
{
// stop recovery, signal do_sync ....
set_bit(MD_RECOVERY_INTR, &mddev->recovery);
- set_bit(MD_RECOVERY_ERROR, &mddev->recovery);
md_wakeup_thread(mddev->thread);
}
EXPORT_SYMBOL(md_sync_error);
@@ -9749,24 +9748,12 @@ update:
if (!test_bit(MD_RECOVERY_CHECK, &mddev->recovery) &&
mddev->curr_resync > MD_RESYNC_ACTIVE) {
+ if (!test_bit(MD_RECOVERY_INTR, &mddev->recovery))
+ mddev->curr_resync = MaxSector;
+
if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery)) {
- if (test_bit(MD_RECOVERY_INTR, &mddev->recovery)) {
- if (mddev->curr_resync >= mddev->resync_offset) {
- pr_debug("md: checkpointing %s of %s.\n",
- desc, mdname(mddev));
- if (test_bit(MD_RECOVERY_ERROR,
- &mddev->recovery))
- mddev->resync_offset =
- mddev->curr_resync_completed;
- else
- mddev->resync_offset =
- mddev->curr_resync;
- }
- } else
- mddev->resync_offset = MaxSector;
+ mddev->resync_offset = mddev->curr_resync;
} else {
- if (!test_bit(MD_RECOVERY_INTR, &mddev->recovery))
- mddev->curr_resync = MaxSector;
if (!test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery) &&
test_bit(MD_RECOVERY_RECOVER, &mddev->recovery)) {
rcu_read_lock();
diff --git a/drivers/md/md.h b/drivers/md/md.h
index 4c3dc7a6e399..cda003f24e1e 100644
--- a/drivers/md/md.h
+++ b/drivers/md/md.h
@@ -652,8 +652,6 @@ enum recovery_flags {
MD_RECOVERY_FROZEN,
/* waiting for pers->start() to finish */
MD_RECOVERY_WAIT,
- /* interrupted because io-error */
- MD_RECOVERY_ERROR,
/* flags determines sync action, see details in enum sync_action */