@@ -3207,60 +3207,61 @@ _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=(
+ "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
}