Re: [PATCH v2 02/11] md: merge mddev faillast_dev into mddev_flags

Li Nan <[email protected]>
Newsgroups gmane.linux.raid,gmane.linux.kernel
Message-ID <[email protected]>

在 2025/11/24 14:31, Yu Kuai 写道:
> There is not need to use a separate field in struct mddev, there are no
> functional changes.
> 
> Signed-off-by: Yu Kuai <[email protected]>
> ---
>   drivers/md/md.c     | 10 ++++++----
>   drivers/md/md.h     |  3 ++-
>   drivers/md/raid0.c  |  3 ++-
>   drivers/md/raid1.c  |  4 ++--
>   drivers/md/raid10.c |  4 ++--
>   drivers/md/raid5.c  |  5 ++++-
>   6 files changed, 18 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/md/md.c b/drivers/md/md.c
> index b49fdee11a03..5dcfd0371090 100644
> --- a/drivers/md/md.c
> +++ b/drivers/md/md.c
> @@ -5864,11 +5864,11 @@ __ATTR(consistency_policy, S_IRUGO | S_IWUSR, consistency_policy_show,
>   
>   static ssize_t fail_last_dev_show(struct mddev *mddev, char *page)
>   {
> -	return sprintf(page, "%d\n", mddev->fail_last_dev);
> +	return sprintf(page, "%d\n", test_bit(MD_FAILLAST_DEV, &mddev->flags));
>   }
>   
>   /*
> - * Setting fail_last_dev to true to allow last device to be forcibly removed
> + * Setting MD_FAILLAST_DEV to allow last device to be forcibly removed
>    * from RAID1/RAID10.
>    */
>   static ssize_t
> @@ -5881,8 +5881,10 @@ fail_last_dev_store(struct mddev *mddev, const char *buf, size_t len)
>   	if (ret)
>   		return ret;
>   
> -	if (value != mddev->fail_last_dev)
> -		mddev->fail_last_dev = value;
> +	if (value)
> +		set_bit(MD_FAILLAST_DEV, &mddev->flags);
> +	else
> +		clear_bit(MD_FAILLAST_DEV, &mddev->flags);
>   
>   	return len;
>   }
> diff --git a/drivers/md/md.h b/drivers/md/md.h
> index b4c9aa600edd..297a104fba88 100644
> --- a/drivers/md/md.h
> +++ b/drivers/md/md.h
> @@ -341,6 +341,7 @@ struct md_cluster_operations;
>    * @MD_BROKEN: This is used to stop writes and mark array as failed.
>    * @MD_DELETED: This device is being deleted
>    * @MD_HAS_SUPERBLOCK: There is persistence sb in member disks.
> + * @MD_FAILLAST_DEV: Allow last rdev to be removed.
>    *
>    * change UNSUPPORTED_MDDEV_FLAGS for each array type if new flag is added
>    */
> @@ -358,6 +359,7 @@ enum mddev_flags {
>   	MD_DO_DELETE,
>   	MD_DELETED,
>   	MD_HAS_SUPERBLOCK,
> +	MD_FAILLAST_DEV,
>   };
>   
>   enum mddev_sb_flags {
> @@ -625,7 +627,6 @@ struct mddev {
>   	/* The sequence number for sync thread */
>   	atomic_t sync_seq;
>   
> -	bool	fail_last_dev:1;
>   	bool	serialize_policy:1;
>   };
>   
> diff --git a/drivers/md/raid0.c b/drivers/md/raid0.c
> index 47aee1b1d4d1..012d8402af28 100644
> --- a/drivers/md/raid0.c
> +++ b/drivers/md/raid0.c
> @@ -27,7 +27,8 @@ module_param(default_layout, int, 0644);
>   	 (1L << MD_JOURNAL_CLEAN) |	\
>   	 (1L << MD_FAILFAST_SUPPORTED) |\
>   	 (1L << MD_HAS_PPL) |		\
> -	 (1L << MD_HAS_MULTIPLE_PPLS))
> +	 (1L << MD_HAS_MULTIPLE_PPLS) |	\
> +	 (1L << MD_FAILLAST_DEV))
>   
>   /*
>    * inform the user of the raid configuration
> diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
> index 57d50465eed1..98b5c93810bb 100644
> --- a/drivers/md/raid1.c
> +++ b/drivers/md/raid1.c
> @@ -1746,7 +1746,7 @@ static void raid1_status(struct seq_file *seq, struct mddev *mddev)
>    *	- &mddev->degraded is bumped.
>    *
>    * @rdev is marked as &Faulty excluding case when array is failed and
> - * &mddev->fail_last_dev is off.
> + * MD_FAILLAST_DEV is not set.
>    */
>   static void raid1_error(struct mddev *mddev, struct md_rdev *rdev)
>   {
> @@ -1759,7 +1759,7 @@ static void raid1_error(struct mddev *mddev, struct md_rdev *rdev)
>   	    (conf->raid_disks - mddev->degraded) == 1) {
>   		set_bit(MD_BROKEN, &mddev->flags);
>   
> -		if (!mddev->fail_last_dev) {
> +		if (!test_bit(MD_FAILLAST_DEV, &mddev->flags)) {
>   			conf->recovery_disabled = mddev->recovery_disabled;
>   			spin_unlock_irqrestore(&conf->device_lock, flags);
>   			return;
> diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
> index 84be4cc7e873..09328e032f14 100644
> --- a/drivers/md/raid10.c
> +++ b/drivers/md/raid10.c
> @@ -1990,7 +1990,7 @@ static int enough(struct r10conf *conf, int ignore)
>    *	- &mddev->degraded is bumped.
>    *
>    * @rdev is marked as &Faulty excluding case when array is failed and
> - * &mddev->fail_last_dev is off.
> + * MD_FAILLAST_DEV is not set.
>    */
>   static void raid10_error(struct mddev *mddev, struct md_rdev *rdev)
>   {
> @@ -2002,7 +2002,7 @@ static void raid10_error(struct mddev *mddev, struct md_rdev *rdev)
>   	if (test_bit(In_sync, &rdev->flags) && !enough(conf, rdev->raid_disk)) {
>   		set_bit(MD_BROKEN, &mddev->flags);
>   
> -		if (!mddev->fail_last_dev) {
> +		if (!test_bit(MD_FAILLAST_DEV, &mddev->flags)) {
>   			spin_unlock_irqrestore(&conf->device_lock, flags);
>   			return;
>   		}
> diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
> index cdbc7eba5c54..74f6729864fa 100644
> --- a/drivers/md/raid5.c
> +++ b/drivers/md/raid5.c
> @@ -56,7 +56,10 @@
>   #include "md-bitmap.h"
>   #include "raid5-log.h"
>   
> -#define UNSUPPORTED_MDDEV_FLAGS	(1L << MD_FAILFAST_SUPPORTED)
> +#define UNSUPPORTED_MDDEV_FLAGS		\
> +	((1L << MD_FAILFAST_SUPPORTED) |	\
> +	 (1L << MD_FAILLAST_DEV))
> +
>   
>   #define cpu_to_group(cpu) cpu_to_node(cpu)
>   #define ANY_GROUP NUMA_NO_NODE
LGTM

Reviewed-by: Li Nan <[email protected]>

-- 
Thanks,
Nan
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.