From: Su Yue <l@damenly.org>
To: Yu Kuai <yukuai1@huaweicloud.com>
Cc: agk@redhat.com, snitzer@kernel.org, mpatocka@redhat.com,
song@kernel.org, xni@redhat.com, dm-devel@lists.linux.dev,
linux-kernel@vger.kernel.org, linux-raid@vger.kernel.org,
yukuai3@huawei.com, yi.zhang@huawei.com, yangerkun@huawei.com
Subject: Re: [PATCH md-6.10 3/9] md: add new helpers for sync_action
Date: Mon, 20 May 2024 19:51:25 +0800 [thread overview]
Message-ID: <v838ekaa.fsf@damenly.org> (raw)
In-Reply-To: <20240509011900.2694291-4-yukuai1@huaweicloud.com>
On Thu 09 May 2024 at 09:18, Yu Kuai <yukuai1@huaweicloud.com>
wrote:
> From: Yu Kuai <yukuai3@huawei.com>
>
> The new helpers will get current sync_action of the array, will
> be used
> in later patches to make code cleaner.
>
> Signed-off-by: Yu Kuai <yukuai3@huawei.com>
> ---
> drivers/md/md.c | 64
> +++++++++++++++++++++++++++++++++++++++++++++++++
> drivers/md/md.h | 3 +++
> 2 files changed, 67 insertions(+)
>
> diff --git a/drivers/md/md.c b/drivers/md/md.c
> index 00bbafcd27bb..48ec35342d1b 100644
> --- a/drivers/md/md.c
> +++ b/drivers/md/md.c
> @@ -69,6 +69,16 @@
> #include "md-bitmap.h"
> #include "md-cluster.h"
>
> +static char *action_name[NR_SYNC_ACTIONS] = {
>
Th array will not be modified, so:
static const char * const action_names[NR_SYNC_ACTIONS]
> + [ACTION_RESYNC] = "resync",
> + [ACTION_RECOVER] = "recover",
> + [ACTION_CHECK] = "check",
> + [ACTION_REPAIR] = "repair",
> + [ACTION_RESHAPE] = "reshape",
> + [ACTION_FROZEN] = "frozen",
> + [ACTION_IDLE] = "idle",
> +};
> +
> /* pers_list is a list of registered personalities protected by
> pers_lock. */
> static LIST_HEAD(pers_list);
> static DEFINE_SPINLOCK(pers_lock);
> @@ -4867,6 +4877,60 @@ metadata_store(struct mddev *mddev, const
> char *buf, size_t len)
> static struct md_sysfs_entry md_metadata =
> __ATTR_PREALLOC(metadata_version, S_IRUGO|S_IWUSR,
> metadata_show, metadata_store);
>
> +enum sync_action md_sync_action(struct mddev *mddev)
> +{
> + unsigned long recovery = mddev->recovery;
> +
> + /*
> + * frozen has the highest priority, means running sync_thread
> will be
> + * stopped immediately, and no new sync_thread can start.
> + */
> + if (test_bit(MD_RECOVERY_FROZEN, &recovery))
> + return ACTION_FROZEN;
> +
> + /*
> + * idle means no sync_thread is running, and no new
> sync_thread is
> + * requested.
> + */
> + if (!test_bit(MD_RECOVERY_RUNNING, &recovery) &&
> + (!md_is_rdwr(mddev) || !test_bit(MD_RECOVERY_NEEDED,
> &recovery)))
> + return ACTION_IDLE;
My brain was lost sometimes looking into nested conditions of md
code...
I agree with Xiao Ni's suggestion that more comments about the
array
state should be added.
> + if (test_bit(MD_RECOVERY_RESHAPE, &recovery) ||
> + mddev->reshape_position != MaxSector)
> + return ACTION_RESHAPE;
> +
> + if (test_bit(MD_RECOVERY_RECOVER, &recovery))
> + return ACTION_RECOVER;
> +
>
In action_show, MD_RECOVERY_SYNC is tested first then
MD_RECOVERY_RECOVER.
After looking through the logic of MD_RECOVERY_RECOVER
clear/set_bit, the
change is fine to me. However, better to follow old pattern unless
there
have resons.
> + if (test_bit(MD_RECOVERY_SYNC, &recovery)) {
> + if (test_bit(MD_RECOVERY_CHECK, &recovery))
> + return ACTION_CHECK;
> + if (test_bit(MD_RECOVERY_REQUESTED, &recovery))
> + return ACTION_REPAIR;
> + return ACTION_RESYNC;
> + }
> +
> + return ACTION_IDLE;
> +}
> +
> +enum sync_action md_sync_action_by_name(char *page)
> +{
> + enum sync_action action;
> +
> + for (action = 0; action < NR_SYNC_ACTIONS; ++action) {
> + if (cmd_match(page, action_name[action]))
> + return action;
> + }
> +
> + return NR_SYNC_ACTIONS;
> +}
> +
> +char *md_sync_action_name(enum sync_action action)
>
And 'const char *'
--
Su
> +{
> + return action_name[action];
> +}
> +
> static ssize_t
> action_show(struct mddev *mddev, char *page)
> {
> diff --git a/drivers/md/md.h b/drivers/md/md.h
> index 2edad966f90a..72ca7a796df5 100644
> --- a/drivers/md/md.h
> +++ b/drivers/md/md.h
> @@ -864,6 +864,9 @@ extern void md_unregister_thread(struct
> mddev *mddev, struct md_thread __rcu **t
> extern void md_wakeup_thread(struct md_thread __rcu *thread);
> extern void md_check_recovery(struct mddev *mddev);
> extern void md_reap_sync_thread(struct mddev *mddev);
> +extern enum sync_action md_sync_action(struct mddev *mddev);
> +extern enum sync_action md_sync_action_by_name(char *page);
> +extern char *md_sync_action_name(enum sync_action action);
> extern bool md_write_start(struct mddev *mddev, struct bio
> *bi);
> extern void md_write_inc(struct mddev *mddev, struct bio *bi);
> extern void md_write_end(struct mddev *mddev);
next prev parent reply other threads:[~2024-05-20 12:38 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-09 1:18 [PATCH RFC md-6.10 0/9] md: refactor and cleanup for sync action Yu Kuai
2024-05-09 1:18 ` [PATCH md-6.10 1/9] md: rearrange recovery_flage Yu Kuai
2024-05-13 15:12 ` Mariusz Tkaczyk
2024-05-14 1:36 ` Yu Kuai
2024-05-14 5:51 ` Xiao Ni
2024-05-14 6:10 ` Yu Kuai
2024-05-14 6:39 ` Xiao Ni
2024-05-09 1:18 ` [PATCH md-6.10 2/9] md: add a new enum type sync_action Yu Kuai
2024-05-14 6:13 ` Xiao Ni
2024-05-09 1:18 ` [PATCH md-6.10 3/9] md: add new helpers for sync_action Yu Kuai
2024-05-14 6:52 ` Xiao Ni
2024-05-14 7:39 ` Yu Kuai
2024-05-14 8:40 ` Xiao Ni
2024-05-14 8:52 ` Yu Kuai
2024-05-20 11:51 ` Su Yue [this message]
2024-05-21 2:30 ` Yu Kuai
2024-05-21 3:25 ` Xiao Ni
2024-05-21 3:50 ` Su Yue
2024-05-09 1:18 ` [PATCH md-6.10 4/9] md: factor out helper to start reshape from action_store() Yu Kuai
2024-05-09 1:18 ` [PATCH md-6.10 5/9] md: replace sysfs api sync_action with new helpers Yu Kuai
2024-05-20 15:01 ` kernel test robot
2024-05-21 2:20 ` Yu Kuai
2024-05-21 3:01 ` Oliver Sang
2024-05-21 3:11 ` Yu Kuai
2024-05-21 3:21 ` Xiao Ni
2024-05-22 2:46 ` Yu Kuai
2024-05-09 1:18 ` [PATCH md-6.10 6/9] md: use new helers in md_do_sync() Yu Kuai
2024-05-09 1:18 ` [PATCH md-6.10 7/9] md: replace last_sync_action with new enum type Yu Kuai
2024-05-09 1:18 ` [PATCH md-6.10 8/9] md: factor out helpers for different sync_action in md_do_sync() Yu Kuai
2024-05-14 7:27 ` Xiao Ni
2024-05-09 1:19 ` [PATCH md-6.10 9/9] md: pass in max_sectors for pers->sync_request() Yu Kuai
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=v838ekaa.fsf@damenly.org \
--to=l@damenly.org \
--cc=agk@redhat.com \
--cc=dm-devel@lists.linux.dev \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-raid@vger.kernel.org \
--cc=mpatocka@redhat.com \
--cc=snitzer@kernel.org \
--cc=song@kernel.org \
--cc=xni@redhat.com \
--cc=yangerkun@huawei.com \
--cc=yi.zhang@huawei.com \
--cc=yukuai1@huaweicloud.com \
--cc=yukuai3@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.