There have been a few issues with turning wbt on and off while IO is in
flight, so add a test that just does some random rw IO and has a
background thread that toggles wbt on and off.

Signed-off-by: Josef Bacik <[email protected]>
---
 tests/block/027     | 47 +++++++++++++++++++++++++++++++++++++++++++++++
 tests/block/027.out |  2 ++
 2 files changed, 49 insertions(+)
 create mode 100755 tests/block/027
 create mode 100644 tests/block/027.out

diff --git a/tests/block/027 b/tests/block/027
new file mode 100755
index 000000000000..dce6431172a8
--- /dev/null
+++ b/tests/block/027
@@ -0,0 +1,47 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-3.0+
+# Copyright (C) 2018 Josef Bacik
+#
+# Turn wbt on and off in the background while writing to the disk to verify
+# there's no races in the inflight counter manipulation
+
+. tests/block/rc
+
+DESCRIPTION="run a read workload and write workload together with wbt"
+
+requires() {
+       _have_fio && _have_program jq
+}
+
+device_requires() {
+       _test_dev_supports_wbt
+}
+
+toggle_wbt() {
+       while true
+       do
+               _test_dev_queue_set wbt_lat_usec 0
+               sleep 1
+               _test_dev_queue_set wbt_lat_usec 1
+               sleep 1                 
+       done
+}
+
+test_device() {
+       echo "Running ${TEST_NAME}"
+
+       local wbt_setting toggle_pid
+       wbt_setting=$(_test_dev_queue_get wbt_lat_usec)
+
+       (toggle_wbt &)
+       toggle_pid=$!
+
+       _run_fio --name randrw --numjobs=8 --runtime=30 --randseed=12345 \
+               --ioengine=psync --readwrite=randrw --filename="$TEST_DEV"
+
+       kill $toggle_pid > /dev/null 2>&1
+       wait
+       _test_dev_queue_set wbt_lat_usec "$wbt_setting"
+
+       echo "Test complete"
+}
diff --git a/tests/block/027.out b/tests/block/027.out
new file mode 100644
index 000000000000..b03498fbc763
--- /dev/null
+++ b/tests/block/027.out
@@ -0,0 +1,2 @@
+Running block/027
+Test complete
-- 
2.14.3

Reply via email to