@@ -34,11 +34,46 @@ rt_configured()
test "$USE_EXTERNAL" = "yes" && test -n "$SCRATCH_RTDEV"
}
+# Does mkfs support rtgroups?
+supports_rtgroups()
+{
+ $MKFS_XFS_PROG 2>&1 | grep -q 'rtgroups='
+}
+
+# Do we need to enable rtgroups at mkfs time to support a feature upgrade test?
+need_rtgroups()
+{
+ local feat="$1"
+
+ # if realtime isn't configured, we don't need rt groups
+ rt_configured || return 1
+
+ # If we don't even know what realtime rmap is, we don't need rt groups
+ test -z "${FEATURE_STATE["rmapbt"]}" && return 1
+
+ # rt rmap btrees require rt groups but rt groups cannot be added to
+ # an existing filesystem, so we must force it on at mkfs time
+ test "${FEATURE_STATE["rmapbt"]}" -eq 1 && return 0
+ test "$feat" = "rmapbt" && return 0
+
+ return 1
+}
+
# Compute the MKFS_OPTIONS string for a particular feature upgrade test
compute_mkfs_options()
{
+ local feat="$1"
local m_opts=""
local caller_options="$MKFS_OPTIONS"
+ local rtgroups
+
+ need_rtgroups "$feat" && rtgroups=1
+ if echo "$caller_options" | grep -q 'rtgroups='; then
+ test -z "$rtgroups" && rtgroups=0
+ caller_options="$(echo "$caller_options" | sed -e 's/rtgroups=*[0-9]*/rtgroups='$rtgroups'/g')"
+ elif [ -n "$rtgroups" ]; then
+ caller_options="$caller_options -r rtgroups=$rtgroups"
+ fi
for feat in "${FEATURES[@]}"; do
local feat_state="${FEATURE_STATE["${feat}"]}"
@@ -170,10 +205,12 @@ post_exercise()
# upgrade don't spread failure to the rest of the tests.
FEATURES=()
if rt_configured; then
+ # rmap wasn't added to rt devices until after metadir and rtgroups
check_repair_upgrade finobt && FEATURES+=("finobt")
check_repair_upgrade inobtcount && FEATURES+=("inobtcount")
check_repair_upgrade bigtime && FEATURES+=("bigtime")
check_repair_upgrade metadir && FEATURES+=("metadir")
+ supports_rtgroups && check_repair_upgrade rmapbt && FEATURES+=("rmapbt")
else
check_repair_upgrade finobt && FEATURES+=("finobt")
check_repair_upgrade rmapbt && FEATURES+=("rmapbt")
@@ -196,7 +233,7 @@ for feat in "${FEATURES[@]}"; do
upgrade_start_message "$feat" | _tee_kernlog $seqres.full > /dev/null
- opts="$(compute_mkfs_options)"
+ opts="$(compute_mkfs_options "$feat")"
echo "mkfs.xfs $opts" >> $seqres.full
# Format filesystem