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 linux-btrfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html