Re: [PATCH md-6.10 1/9] md: rearrange recovery_flage

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

在 2024/05/14 13:51, Xiao Ni 写道:
On Mon, May 13, 2024 at 9:57 AM Yu Kuai <yukuai1@xxxxxxxxxxxxxxx> wrote:

From: Yu Kuai <yukuai3@xxxxxxxxxx>

Currently there are lots of flags and the names are confusing, since
there are two main types of flags, sync thread runnng status and sync
thread action, rearrange and update comment to improve code readability,
there are no functional changes.

Signed-off-by: Yu Kuai <yukuai3@xxxxxxxxxx>
---
  drivers/md/md.h | 52 ++++++++++++++++++++++++++++++++++++-------------
  1 file changed, 38 insertions(+), 14 deletions(-)

diff --git a/drivers/md/md.h b/drivers/md/md.h
index 029dd0491a36..2a1cb7b889e5 100644
--- a/drivers/md/md.h
+++ b/drivers/md/md.h
@@ -551,22 +551,46 @@ struct mddev {
  };

  enum recovery_flags {
+       /* flags for sync thread running status */
+
+       /*
+        * set when one of sync action is set and new sync thread need to be
+        * registered, or just add/remove spares from conf.
+        */
+       MD_RECOVERY_NEEDED,
+       /* sync thread is running, or about to be started */
+       MD_RECOVERY_RUNNING,
+       /* sync thread needs to be aborted for some reason */
+       MD_RECOVERY_INTR,
+       /* sync thread is done and is waiting to be unregistered */
+       MD_RECOVERY_DONE,
+       /* running sync thread must abort immediately, and not restart */
+       MD_RECOVERY_FROZEN,
+       /* waiting for pers->start() to finish */
+       MD_RECOVERY_WAIT,
+       /* interrupted because io-error */
+       MD_RECOVERY_ERROR,
+
+       /* flags determines sync action */
+
+       /* if just this flag is set, action is resync. */
+       MD_RECOVERY_SYNC,
+       /*
+        * paired with MD_RECOVERY_SYNC, if MD_RECOVERY_CHECK is not set,
+        * action is repair, means user requested resync.
+        */
+       MD_RECOVERY_REQUESTED,
         /*
-        * If neither SYNC or RESHAPE are set, then it is a recovery.
+        * paired with MD_RECOVERY_SYNC and MD_RECOVERY_REQUESTED, action is
+        * check.

Hi Kuai

I did a test as follows:

echo check > /sys/block/md0/md/sync_action
I added some logs in md_do_sync to check these bits. It only prints
MD_RECOVERY_SYNC and MD_RECOVERY_CHECK without MD_RECOVERY_SYNC. So
the comment is not right?

There is a typo, I'm not sure what you mean yet. Can you show how you
add your logs? I think comment is right.

From action_store:

                if (cmd_match(page, "check"))
                        set_bit(MD_RECOVERY_CHECK, &mddev->recovery);
                else if (!cmd_match(page, "repair"))
                        return -EINVAL;
                clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
                set_bit(MD_RECOVERY_REQUESTED, &mddev->recovery);
                set_bit(MD_RECOVERY_SYNC, &mddev->recovery);

From md_do_sync:

        if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery)) {
                if (test_bit(MD_RECOVERY_CHECK, &mddev->recovery)) {
                        desc = "data-check";
                        action = "check";
} else if (test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery)) {
                        desc = "requested-resync";
                        action = "repair";
                } else
                        desc = "resync";

Thanks,
Kuai


Best Regards
Xiao

          */
-       MD_RECOVERY_RUNNING,    /* a thread is running, or about to be started */
-       MD_RECOVERY_SYNC,       /* actually doing a resync, not a recovery */
-       MD_RECOVERY_RECOVER,    /* doing recovery, or need to try it. */
-       MD_RECOVERY_INTR,       /* resync needs to be aborted for some reason */
-       MD_RECOVERY_DONE,       /* thread is done and is waiting to be reaped */
-       MD_RECOVERY_NEEDED,     /* we might need to start a resync/recover */
-       MD_RECOVERY_REQUESTED,  /* user-space has requested a sync (used with SYNC) */
-       MD_RECOVERY_CHECK,      /* user-space request for check-only, no repair */
-       MD_RECOVERY_RESHAPE,    /* A reshape is happening */
-       MD_RECOVERY_FROZEN,     /* User request to abort, and not restart, any action */
-       MD_RECOVERY_ERROR,      /* sync-action interrupted because io-error */
-       MD_RECOVERY_WAIT,       /* waiting for pers->start() to finish */
-       MD_RESYNCING_REMOTE,    /* remote node is running resync thread */
+       MD_RECOVERY_CHECK,
+       /* recovery, or need to try it */
+       MD_RECOVERY_RECOVER,
+       /* reshape */
+       MD_RECOVERY_RESHAPE,
+       /* remote node is running resync thread */
+       MD_RESYNCING_REMOTE,
  };

  enum md_ro_state {
--
2.39.2



.






[Index of Archives]     [Linux RAID Wiki]     [ATA RAID]     [Linux SCSI Target Infrastructure]     [Linux Block]     [Linux IDE]     [Linux SCSI]     [Linux Hams]     [Device Mapper]     [Device Mapper Cryptographics]     [Kernel]     [Linux Admin]     [Linux Net]     [GFS]     [RPM]     [git]     [Yosemite Forum]


  Powered by Linux