]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
md: remove MD_RECOVERY_ERROR handling and simplify resync_offset update
authorLi Nan <linan122@huawei.com>
Mon, 5 Jan 2026 11:02:55 +0000 (19:02 +0800)
committerYu Kuai <yukuai@fnnas.com>
Mon, 26 Jan 2026 05:16:19 +0000 (13:16 +0800)
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>
drivers/md/md.c
drivers/md/md.h

index 96f7eadbf959b404d3a866a731e2516ebb49c6cc..3ef845af552bbc054f446dae556e95c3fb6935d2 100644 (file)
@@ -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();
index 4c3dc7a6e399d5a88d918332f070ef98c6190e04..cda003f24e1ea260694ce9103074d2f2383218a6 100644 (file)
@@ -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 */