summaryrefslogtreecommitdiff
path: root/tests/bcache/reboot-fio.sh
blob: a747e1b9ff562bc5c40695298c275b10f19d1ade (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
config-cpus 1

nr_iterations=$((((ktest_priority / 2) + 1) * 8))
config-timeout $((nr_iterations * 60))

# Usage: fio_pass read/write verify
fio_pass()
{
    (
	# Our default working directory (/cdrom) is not writable,
	# fio wants to write files when verify_dump is set, so
	# change to a different directory.
	cd $ktest_out

	for dev in $DEVICES; do
	    fio --eta=always - <<-ZZ &
		[global]
		randrepeat=0
		ioengine=libaio
		iodepth=64
		direct=1

		verify_fatal=1
		verify_dump=1

		filename=$dev

		[foo]
		blocksize_range=4k-128k
		rw=$1
		verify=$2
		ZZ
	done

	wait_all
    )
}

test_main()
{
    setup_tracing 'bcache:*'

    if [ $NR_REBOOTS = 0 ]; then
	setup_bcache
    else
	existing_bcache
    fi

    run_antagonist

    if [ "$NR_REBOOTS" == "$nr_iterations" ]; then
	discard_all_devices
	stop_bcache
    else
	case $((NR_REBOOTS % 2)) in
	    0)
		workload=write
		;;
	    1)
		workload=read
		;;
	esac

	# Change verify type between successive write/read pairs
	# to detect stale data
	case $(((NR_REBOOTS / 2) % 2)) in
	    0)
		verify=crc32c-intel
		;;
	    1)
		verify=meta
		;;
	esac

	fio_pass $workload $verify

	# Unclean vs unclean shutdown
	case $(((NR_REBOOTS / 4) % 2)) in
	    1)
		stop_bcache
		;;
	esac

	do_reboot
    fi
}