mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
btrfs: add replace missing and replace RAID 5/6 to profile configs
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@fb.com> Reviewed-by: Eryu Guan <eguan@redhat.com> Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:
committed by
Dave Chinner
parent
238397db22
commit
0a9b318f41
@@ -3223,60 +3223,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
|
||||
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
|
||||
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"
|
||||
fi
|
||||
fi
|
||||
export _btrfs_profile_configs
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user