@@ -4982,20 +4982,46 @@ _require_hugepage_fsx()
_notrun "fsx binary does not support MADV_COLLAPSE"
}
-run_fsx()
+_run_fsx()
{
- echo fsx $@
+ echo "fsx $*"
local args=`echo $@ | sed -e "s/ BSIZE / $bsize /g" -e "s/ PSIZE / $psize /g"`
set -- $here/ltp/fsx $args $FSX_AVOID $TEST_DIR/junk
echo "$@" >>$seqres.full
rm -f $TEST_DIR/junk
"$@" 2>&1 | tee -a $seqres.full >$tmp.fsx
- if [ ${PIPESTATUS[0]} -ne 0 ]; then
+ local res=${PIPESTATUS[0]}
+ if [ $res -ne 0 ]; then
cat $tmp.fsx
rm -f $tmp.fsx
- exit 1
+ return $res
fi
rm -f $tmp.fsx
+ return 0
+}
+
+# Run fsx with -h(ugepage buffers). If we can't set up a hugepage then skip
+# the test, but if any other error occurs then exit the test.
+_run_hugepage_fsx() {
+ _run_fsx "$@" -h &> $tmp.hugepage_fsx
+ local res=$?
+ if [ $res -eq 103 ]; then
+ # According to the MADV_COLLAPSE manpage, these three errors
+ # can happen if the kernel could not collapse a collection of
+ # pages into a single huge page.
+ grep -q -E ' for hugebuf: (Cannot allocate memory|Device or resource busy|Resource temporarily unavailable)' $tmp.hugepage_fsx && \
+ _notrun "Could not set up huge page for test"
+ fi
+ cat $tmp.hugepage_fsx
+ rm -f $tmp.hugepage_fsx
+ test $res -ne 0 && exit 1
+ return 0
+}
+
+# run fsx or exit the test
+run_fsx()
+{
+ _run_fsx || exit 1
}
_require_statx()
@@ -2974,13 +2974,15 @@ init_hugepages_buf(unsigned len, int hugepage_size, int alignment, long *buf_siz
ret = posix_memalign(&buf, hugepage_size, size);
if (ret) {
- prterr("posix_memalign for buf");
+ /* common/rc greps this error message */
+ prterr("posix_memalign for hugebuf");
return NULL;
}
memset(buf, '\0', size);
ret = madvise(buf, size, MADV_COLLAPSE);
if (ret) {
- prterr("madvise collapse for buf");
+ /* common/rc greps this error message */
+ prterr("madvise collapse for hugebuf");
free(buf);
return NULL;
}
@@ -15,9 +15,9 @@ _require_test
_require_thp
_require_hugepage_fsx
-run_fsx -N 10000 -l 500000 -h
-run_fsx -N 10000 -o 8192 -l 500000 -h
-run_fsx -N 10000 -o 128000 -l 500000 -h
+_run_hugepage_fsx -N 10000 -l 500000
+_run_hugepage_fsx -N 10000 -o 8192 -l 500000
+_run_hugepage_fsx -N 10000 -o 128000 -l 500000
status=0
exit
@@ -19,9 +19,9 @@ _require_hugepage_fsx
psize=`$here/src/feature -s`
bsize=`$here/src/min_dio_alignment $TEST_DIR $TEST_DEV`
-run_fsx -N 10000 -l 500000 -r PSIZE -t BSIZE -w BSIZE -Z -R -W -h
-run_fsx -N 10000 -o 8192 -l 500000 -r PSIZE -t BSIZE -w BSIZE -Z -R -W -h
-run_fsx -N 10000 -o 128000 -l 500000 -r PSIZE -t BSIZE -w BSIZE -Z -R -W -h
+_run_hugepage_fsx -N 10000 -l 500000 -r PSIZE -t BSIZE -w BSIZE -Z -R -W
+_run_hugepage_fsx -N 10000 -o 8192 -l 500000 -r PSIZE -t BSIZE -w BSIZE -Z -R -W
+_run_hugepage_fsx -N 10000 -o 128000 -l 500000 -r PSIZE -t BSIZE -w BSIZE -Z -R -W
status=0
exit