[DTrace-devel] [PATCH] test: Retry umount if necessary
eugene.loh at oracle.com
eugene.loh at oracle.com
Tue Dec 3 20:16:01 UTC 2024
From: Eugene Loh <eugene.loh at oracle.com>
The io tests tst.local.sh and tst.wait.sh fail with some frequency,
with error messages like "umount: $iodir: target is busy."
Modify the tests' dtrace trigger, doio.sh, so that it will retry
umount a few times, if necessary. Specifically, remove the "set -e"
and individually check for and report errors, in the case of umount
retrying a few times before giving up.
While we're at it, notice that the two tests use the same $iodir.
There is no need for the tests to be coupled in this way. Change
those two tests so that each test has a fresh value of iodir.
Signed-off-by: Eugene Loh <eugene.loh at oracle.com>
---
test/triggers/doio.sh | 29 ++++++++++++++++++++++++++---
test/unittest/io/tst.local.sh | 2 +-
test/unittest/io/tst.wait.sh | 2 +-
3 files changed, 28 insertions(+), 5 deletions(-)
diff --git a/test/triggers/doio.sh b/test/triggers/doio.sh
index a2a39c245..0171a4b4c 100755
--- a/test/triggers/doio.sh
+++ b/test/triggers/doio.sh
@@ -22,15 +22,38 @@ mountdir=$4
mountarg1=${5-""}
mountarg2=${6-""}
-set -e
-
# do writes
dd if=/dev/urandom of=$tempfile count=$filesize bs=1 status=none
+if [ $? -ne 0 ]; then
+ echo ERROR dd
+ exit 1
+fi
# flush cache and remount the file system to force the IO
-umount $mountdir
+ntries=3
+while [ $ntries -gt 0 ]; do
+ umount $mountdir >& /dev/null
+ if [ $? -eq 0 ]; then
+ break
+ fi
+ sleep 1
+ ntries=$(($ntries - 1))
+done
+if [ $ntries -eq 0 ]; then
+ echo ERROR umount
+ exit 1
+fi
+
echo 3 > /proc/sys/vm/drop_caches
$mountcmd $mountdir $mountarg1 $mountarg2
+if [ $? -ne 0 ]; then
+ echo ERROR $mountcmd
+ exit 1
+fi
# do reads
sum $tempfile > /dev/null
+if [ $? -ne 0 ]; then
+ echo ERROR sum
+ exit 1
+fi
diff --git a/test/unittest/io/tst.local.sh b/test/unittest/io/tst.local.sh
index d3dbf1713..702c6f453 100755
--- a/test/unittest/io/tst.local.sh
+++ b/test/unittest/io/tst.local.sh
@@ -18,7 +18,7 @@ minsize=$((filesize / 10 * 9))
fstype=xfs
# file system-specific options
fsoptions="defaults,atime,diratime,nosuid,nodev"
-iodir=$tmpdir/test-$fstype-io
+iodir=$tmpdir/test-$fstype-io-local.$$
tempfile=`mktemp -u -p $iodir`
trap "umount $iodir; rmdir $iodir; rm -f $iodir.img" QUIT EXIT
diff --git a/test/unittest/io/tst.wait.sh b/test/unittest/io/tst.wait.sh
index 016b922eb..24ac2e436 100755
--- a/test/unittest/io/tst.wait.sh
+++ b/test/unittest/io/tst.wait.sh
@@ -15,7 +15,7 @@ filesize=$((1024*$nblocks))
fstype=xfs
# file system-specific options
fsoptions="defaults,atime,diratime,nosuid,nodev"
-iodir=$tmpdir/test-$fstype-io
+iodir=$tmpdir/test-$fstype-io-wait.$$
tempfile=`mktemp -u -p $iodir`
trap "umount $iodir; rmdir $iodir; rm -f $iodir.img" QUIT EXIT
--
2.43.5
More information about the DTrace-devel
mailing list