Re: [PATCH 2/3] btrfs: add replace missing and replace RAID 5/6 to profile configs

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



On Thu, Jul 23, 2015 at 01:51:50PM -0700, Omar Sandoval wrote:
> Replacing and scrubbing RAID 5/6 is now supported on Btrfs. Enable it in
> _btrfs_get_profile_configs while making it more generic to also support
> replace missing.
> 
> Signed-off-by: Omar Sandoval <osandov@xxxxxx>

Looks great! Tested with default configs and user-defined configs.

Reviewed-by: Eryu Guan <eguan@xxxxxxxxxx>

> ---
>  common/rc | 96 ++++++++++++++++++++++++++++++++-------------------------------
>  1 file changed, 49 insertions(+), 47 deletions(-)
> 
> diff --git a/common/rc b/common/rc
> index 610045eab304..3e6fdb6ebcfa 100644
> --- a/common/rc
> +++ b/common/rc
> @@ -2748,60 +2748,62 @@ _btrfs_get_profile_configs()
>  		return
>  	fi
>  
> -	# no user specified btrfs profile configs, export the default configs
>  	if [ -z "$BTRFS_PROFILE_CONFIGS" ]; then
> -		# default configs
> -		_btrfs_profile_configs=(
> -			"-m single -d single"
> -			"-m dup -d single"
> -			"-m raid0 -d raid0"
> -			"-m raid1 -d raid0"
> -			"-m raid1 -d raid1"
> -			"-m raid10 -d raid10"
> -			"-m raid5 -d raid5"
> -			"-m raid6 -d raid6"
> +		# Default configurations to test.
> +		local configs=(
> +			"single:single"
> +			"dup:single"
> +			"raid0:raid0"
> +			"raid1:raid0"
> +			"raid1:raid1"
> +			"raid10:raid10"
> +			"raid5:raid5"
> +			"raid6:raid6"
>  		)
> +	else
> +		# User-provided configurations.
> +		local configs=(${BTRFS_PROFILE_CONFIGS[@]})
> +	fi
>  
> -		# remove dup/raid5/raid6 profiles if we're doing device replace
> -		# dup profile indicates only one device being used (SCRATCH_DEV),
> -		# but we don't want to replace SCRATCH_DEV, which will be used in
> -		# _scratch_mount/_check_scratch_fs etc.
> -		# and raid5/raid6 doesn't support replace yet
> +	_btrfs_profile_configs=()
> +	for cfg in "${configs[@]}"; do
> +		local supported=true
> +		local profiles=(${cfg/:/ })
>  		if [ "$1" == "replace" ]; then
> -			_btrfs_profile_configs=(
> -				"-m single -d single"
> -				"-m raid0 -d raid0"
> -				"-m raid1 -d raid0"
> -				"-m raid1 -d raid1"
> -				"-m raid10 -d raid10"
> -				# add these back when raid5/6 is working with replace
> -				#"-m raid5 -d raid5"
> -				#"-m raid6 -d raid6"
> +			# We can't do replace with these profiles because they
> +			# imply only one device ($SCRATCH_DEV), and we need to
> +			# keep $SCRATCH_DEV around for _scratch_mount
> +			# and _check_scratch_fs.
> +			local unsupported=(
> +				"single"
> +				"dup"
>  			)
> +		elif [ "$1" == "replace-missing" ]; then
> +			# We can't replace missing devices with these profiles
> +			# because there isn't enough redundancy.
> +			local unsupported=(
> +				"single"
> +				"dup"
> +				"raid0"
> +			)
> +		else
> +			local unsupported=()
>  		fi
> -		export _btrfs_profile_configs
> -		return
> -	fi
> -
> -	# parse user specified btrfs profile configs
> -	local i=0
> -	local cfg=""
> -	for cfg in $BTRFS_PROFILE_CONFIGS; do
> -		# turn "metadata:data" format to "-m metadata -d data"
> -		# and assign it to _btrfs_profile_configs array
> -		cfg=`echo "$cfg" | sed -e 's/^/-m /' -e 's/:/ -d /'`
> -		_btrfs_profile_configs[$i]="$cfg"
> -		let i=i+1
> -	done
> -
> -	if [ "$1" == "replace" ]; then
> -		if echo ${_btrfs_profile_configs[*]} | grep -q raid[56]; then
> -			_notrun "RAID5/6 doesn't support btrfs device replace yet"
> -		fi
> -		if echo ${_btrfs_profile_configs[*]} | grep -q dup; then
> -			_notrun "Do not set dup profile in btrfs device replace test"
> +		for unsupp in "${unsupported[@]}"; do
> +			if [ "${profiles[0]}" == "$unsupp" -o "${profiles[1]}" == "$unsupp" ]; then
> +			     if [ -z "$BTRFS_PROFILE_CONFIGS" ]; then
> +				     # For the default config, just omit it.
> +				     supported=false
> +			     else
> +				     # For user-provided config, don't run the test.
> +				     _notrun "Profile $unsupp not supported for $1"
> +			     fi
> +			fi
> +		done
> +		if "$supported"; then
> +			_btrfs_profile_configs+=("-m ${profiles[0]} -d ${profiles[1]}")
>  		fi
> -	fi
> +	done
>  	export _btrfs_profile_configs
>  }
>  
> -- 
> 2.4.6
> 
> --
> To unsubscribe from this list: send the line "unsubscribe fstests" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe fstests" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Filesystems Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux