Re: [PATCH] md/raid1: fail run raid1 array when active disk less than one

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

 



On Mon, Sep 02 2019, Yufen Yu wrote:

> When active disk in raid1 array less than one, we need to return
> fail to run.

Seems reasonable, but how can this happen?
As we never fail the last device in a RAID1, there should always
appear to be one that is working.

Have you had a situation where this in actually needed?

Thanks,
NeilBrown

>
> Signed-off-by: Yufen Yu <yuyufen@xxxxxxxxxx>
> ---
>  drivers/md/raid1.c | 13 ++++++++++++-
>  1 file changed, 12 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
> index 34e26834ad28..2a554464d6a4 100644
> --- a/drivers/md/raid1.c
> +++ b/drivers/md/raid1.c
> @@ -3127,6 +3127,13 @@ static int raid1_run(struct mddev *mddev)
>  		    !test_bit(In_sync, &conf->mirrors[i].rdev->flags) ||
>  		    test_bit(Faulty, &conf->mirrors[i].rdev->flags))
>  			mddev->degraded++;
> +	/*
> +	 * RAID1 needs at least one disk in active
> +	 */
> +	if (conf->raid_disks - mddev->degraded < 1) {
> +		ret = -EINVAL;
> +		goto abort;
> +	}
>  
>  	if (conf->raid_disks - mddev->degraded == 1)
>  		mddev->recovery_cp = MaxSector;
> @@ -3160,8 +3167,12 @@ static int raid1_run(struct mddev *mddev)
>  	ret = md_integrity_register(mddev);
>  	if (ret) {
>  		md_unregister_thread(&mddev->thread);
> -		raid1_free(mddev, conf);
> +		goto abort;
>  	}
> +	return 0;
> +
> +abort:
> +	raid1_free(mddev, conf);
>  	return ret;
>  }
>  
> -- 
> 2.17.2

Attachment: signature.asc
Description: PGP signature


[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