@@ -12,41 +12,11 @@ DESCRIPTION="test md atomic writes"
1212QUICK=1
1313
1414requires () {
15- _have_kver 6 14 0
16- _have_program mdadm
1715 _have_driver scsi_debug
18- _have_xfs_io_atomic_write
19- _have_driver raid0
20- _have_driver raid1
21- _have_driver raid10
16+ _stacked_atomic_test_requires
2217}
2318
2419test () {
25- local scsi_debug_atomic_wr_max_length
26- local scsi_debug_atomic_wr_gran
27- local scsi_sysfs_atomic_max_bytes
28- local scsi_sysfs_atomic_unit_max_bytes
29- local scsi_sysfs_atomic_unit_min_bytes
30- local md_atomic_max_bytes
31- local md_atomic_min_bytes
32- local md_sysfs_max_hw_sectors_kb
33- local md_max_hw_bytes
34- local md_chunk_size
35- local md_chunk_size_bytes
36- local md_sysfs_logical_block_size
37- local md_sysfs_atomic_max_bytes
38- local md_sysfs_atomic_unit_max_bytes
39- local md_sysfs_atomic_unit_min_bytes
40- local bytes_to_write
41- local bytes_written
42- local test_desc
43- local scsi_0
44- local scsi_1
45- local scsi_2
46- local scsi_3
47- local scsi_dev_sysfs
48- local md_dev
49- local md_dev_sysfs
5020 local scsi_debug_params=(
5121 delay=0
5222 atomic_wr=1
@@ -61,188 +31,8 @@ test() {
6131 return 1
6232 fi
6333
64- scsi_0=" ${SCSI_DEBUG_DEVICES[0]} "
65- scsi_1=" ${SCSI_DEBUG_DEVICES[1]} "
66- scsi_2=" ${SCSI_DEBUG_DEVICES[2]} "
67- scsi_3=" ${SCSI_DEBUG_DEVICES[3]} "
68-
69- scsi_dev_sysfs=" /sys/block/${scsi_0} "
70- scsi_sysfs_atomic_max_bytes=$( < " ${scsi_dev_sysfs} " /queue/atomic_write_max_bytes)
71- scsi_sysfs_atomic_unit_max_bytes=$( < " ${scsi_dev_sysfs} " /queue/atomic_write_unit_max_bytes)
72- scsi_sysfs_atomic_unit_min_bytes=$( < " ${scsi_dev_sysfs} " /queue/atomic_write_unit_min_bytes)
73- scsi_debug_atomic_wr_max_length=$( < /sys/module/scsi_debug/parameters/atomic_wr_max_length)
74- scsi_debug_atomic_wr_gran=$( < /sys/module/scsi_debug/parameters/atomic_wr_gran)
75-
76- for raid_level in 0 1 10; do
77- if [ " $raid_level " = 10 ]
78- then
79- mdadm --create /dev/md/blktests_md --level=$raid_level \
80- --raid-devices=4 --force --run /dev/" ${scsi_0} " /dev/" ${scsi_1} " \
81- /dev/" ${scsi_2} " /dev/" ${scsi_3} " 2> /dev/null 1>&2
82- else
83- mdadm --create /dev/md/blktests_md --level=$raid_level \
84- --raid-devices=2 --force --run \
85- /dev/" ${scsi_0} " /dev/" ${scsi_1} " 2> /dev/null 1>&2
86- fi
87-
88- md_dev=$( readlink /dev/md/blktests_md | sed ' s|\.\./||' )
89- md_dev_sysfs=" /sys/devices/virtual/block/${md_dev} "
90-
91- md_sysfs_logical_block_size=$( < " ${md_dev_sysfs} " /queue/logical_block_size)
92- md_sysfs_max_hw_sectors_kb=$( < " ${md_dev_sysfs} " /queue/max_hw_sectors_kb)
93- md_max_hw_bytes=$(( "$md_sysfs_max_hw_sectors_kb " * 1024 ))
94- md_sysfs_atomic_max_bytes=$( < " ${md_dev_sysfs} " /queue/atomic_write_max_bytes)
95- md_sysfs_atomic_unit_max_bytes=$( < " ${md_dev_sysfs} " /queue/atomic_write_unit_max_bytes)
96- md_sysfs_atomic_unit_min_bytes=$( < " ${md_dev_sysfs} " /queue/atomic_write_unit_min_bytes)
97- md_atomic_max_bytes=$(( "$scsi_debug_atomic_wr_max_length " * "$md_sysfs_logical_block_size " ))
98- md_atomic_min_bytes=$(( "$scsi_debug_atomic_wr_gran " * "$md_sysfs_logical_block_size " ))
99-
100- test_desc=" TEST 1 RAID $raid_level - Verify md sysfs atomic attributes matches scsi"
101- if [ " $md_sysfs_atomic_unit_max_bytes " = " $scsi_sysfs_atomic_unit_max_bytes " ] &&
102- [ " $md_sysfs_atomic_unit_min_bytes " = " $scsi_sysfs_atomic_unit_min_bytes " ]
103- then
104- echo " $test_desc - pass"
105- else
106- echo " $test_desc - fail $md_sysfs_atomic_unit_max_bytes - $scsi_sysfs_atomic_unit_max_bytes -" \
107- " $md_sysfs_atomic_unit_min_bytes - $scsi_sysfs_atomic_unit_min_bytes "
108- fi
109-
110- test_desc=" TEST 2 RAID $raid_level - Verify sysfs atomic attributes"
111- if [ " $md_max_hw_bytes " -ge " $md_sysfs_atomic_max_bytes " ] &&
112- [ " $md_sysfs_atomic_max_bytes " -ge " $md_sysfs_atomic_unit_max_bytes " ] &&
113- [ " $md_sysfs_atomic_unit_max_bytes " -ge " $md_sysfs_atomic_unit_min_bytes " ]
114- then
115- echo " $test_desc - pass"
116- else
117- echo " $test_desc - fail $md_max_hw_bytes - $md_sysfs_max_hw_sectors_kb -" \
118- " $md_sysfs_atomic_max_bytes - $md_sysfs_atomic_unit_max_bytes -" \
119- " $md_sysfs_atomic_unit_min_bytes "
120- fi
121-
122- test_desc=" TEST 3 RAID $raid_level - Verify md sysfs_atomic_max_bytes is less than or equal "
123- test_desc+=" scsi sysfs_atomic_max_bytes"
124- if [ " $md_sysfs_atomic_max_bytes " -le " $scsi_sysfs_atomic_max_bytes " ]
125- then
126- echo " $test_desc - pass"
127- else
128- echo " $test_desc - fail $md_sysfs_atomic_max_bytes - $scsi_sysfs_atomic_max_bytes "
129- fi
130-
131- test_desc=" TEST 4 RAID $raid_level - check sysfs atomic_write_unit_max_bytes <= scsi_debug atomic_wr_max_length"
132- if (( "$md_sysfs_atomic_unit_max_bytes " <= "$md_atomic_max_bytes "))
133- then
134- echo " $test_desc - pass"
135- else
136- echo " $test_desc - fail $md_sysfs_atomic_unit_max_bytes - $md_atomic_max_bytes "
137- fi
138-
139- test_desc=" TEST 5 RAID $raid_level - check sysfs atomic_write_unit_min_bytes = scsi_debug atomic_wr_gran"
140- if [ " $md_sysfs_atomic_unit_min_bytes " = " $md_atomic_min_bytes " ]
141- then
142- echo " $test_desc - pass"
143- else
144- echo " $test_desc - fail $md_sysfs_atomic_unit_min_bytes - $md_atomic_min_bytes "
145- fi
146-
147- test_desc=" TEST 6 RAID $raid_level - check statx stx_atomic_write_unit_min"
148- statx_atomic_min=$( run_xfs_io_xstat /dev/" $md_dev " " stat.atomic_write_unit_min" )
149- if [ " $statx_atomic_min " = " $md_atomic_min_bytes " ]
150- then
151- echo " $test_desc - pass"
152- else
153- echo " $test_desc - fail $statx_atomic_min - $md_atomic_min_bytes "
154- fi
155-
156- test_desc=" TEST 7 RAID $raid_level - check statx stx_atomic_write_unit_max"
157- statx_atomic_max=$( run_xfs_io_xstat /dev/" $md_dev " " stat.atomic_write_unit_max" )
158- if [ " $statx_atomic_max " = " $md_sysfs_atomic_unit_max_bytes " ]
159- then
160- echo " $test_desc - pass"
161- else
162- echo " $test_desc - fail $statx_atomic_max - $md_sysfs_atomic_unit_max_bytes "
163- fi
164-
165- test_desc=" TEST 8 RAID $raid_level - perform a pwritev2 with size of sysfs_atomic_unit_max_bytes with "
166- test_desc+=" RWF_ATOMIC flag - pwritev2 should be succesful"
167- bytes_written=$( run_xfs_io_pwritev2_atomic /dev/" $md_dev " " $md_sysfs_atomic_unit_max_bytes " )
168- if [ " $bytes_written " = " $md_sysfs_atomic_unit_max_bytes " ]
169- then
170- echo " $test_desc - pass"
171- else
172- echo " $test_desc - fail $bytes_written - $md_sysfs_atomic_unit_max_bytes "
173- fi
174-
175- test_desc=" TEST 9 RAID $raid_level - perform a pwritev2 with size of sysfs_atomic_unit_max_bytes + 512 "
176- test_desc+=" bytes with RWF_ATOMIC flag - pwritev2 should not be succesful"
177- bytes_to_write=$(( "${md_sysfs_atomic_unit_max_bytes} " + 512 ))
178- bytes_written=$( run_xfs_io_pwritev2_atomic /dev/" $md_dev " " $bytes_to_write " )
179- if [ " $bytes_written " = " " ]
180- then
181- echo " $test_desc - pass"
182- else
183- echo " $test_desc - fail $bytes_written - $bytes_to_write "
184- fi
185-
186- test_desc=" TEST 10 RAID $raid_level - perform a pwritev2 with size of sysfs_atomic_unit_min_bytes "
187- test_desc+=" with RWF_ATOMIC flag - pwritev2 should be succesful"
188- bytes_written=$( run_xfs_io_pwritev2_atomic /dev/" $md_dev " " $md_sysfs_atomic_unit_min_bytes " )
189- if [ " $bytes_written " = " $md_sysfs_atomic_unit_min_bytes " ]
190- then
191- echo " $test_desc - pass"
192- else
193- echo " $test_desc - fail $bytes_written - $md_atomic_min_bytes "
194- fi
195-
196- bytes_to_write=$(( "${md_sysfs_atomic_unit_min_bytes} " - "${md_sysfs_logical_block_size} " ))
197- test_desc=" TEST 11 RAID $raid_level - perform a pwritev2 with a size of sysfs_atomic_unit_min_bytes - 512 "
198- test_desc+=" bytes with RWF_ATOMIC flag - pwritev2 should fail"
199- if [ " $bytes_to_write " = 0 ]
200- then
201- echo " $test_desc - pass"
202- else
203- bytes_written=$( run_xfs_io_pwritev2_atomic /dev/" $md_dev " " $bytes_to_write " )
204- if [ " $bytes_written " = " " ]
205- then
206- echo " $test_desc - pass"
207- else
208- echo " $test_desc - fail $bytes_written - $bytes_to_write "
209- fi
210- fi
211-
212- mdadm --stop /dev/md/blktests_md 2> /dev/null 1>&2
213-
214- if [ " $raid_level " = 0 ] || [ " $raid_level " = 10 ]
215- then
216- md_chunk_size=$(( "$scsi_sysfs_atomic_unit_max_bytes " / 2048 ))
217-
218- if [ " $raid_level " = 0 ]
219- then
220- mdadm --create /dev/md/blktests_md --level=$raid_level \
221- --raid-devices=2 --chunk=" ${md_chunk_size} " K --force --run \
222- /dev/" ${scsi_0} " /dev/" ${scsi_1} " 2> /dev/null 1>&2
223- else
224- mdadm --create /dev/md/blktests_md --level=$raid_level \
225- --raid-devices=4 --chunk=" ${md_chunk_size} " K --force --run \
226- /dev/" ${scsi_0} " /dev/" ${scsi_1} " \
227- /dev/" ${scsi_2} " /dev/" ${scsi_3} " 2> /dev/null 1>&2
228- fi
229-
230- md_dev=$( readlink /dev/md/blktests_md | sed ' s|\.\./||' )
231- md_dev_sysfs=" /sys/devices/virtual/block/${md_dev} "
232- md_sysfs_atomic_unit_max_bytes=$( < " ${md_dev_sysfs} " /queue/atomic_write_unit_max_bytes)
233- md_chunk_size_bytes=$(( "$md_chunk_size " * 1024 ))
234- test_desc=" TEST 12 RAID $raid_level - Verify chunk size "
235- if [ " $md_chunk_size_bytes " -le " $md_sysfs_atomic_unit_max_bytes " ] && \
236- (( md_sysfs_atomic_unit_max_bytes % md_chunk_size_bytes == 0 ))
237- then
238- echo " $test_desc - pass"
239- else
240- echo " $test_desc - fail $md_chunk_size_bytes - $md_sysfs_atomic_unit_max_bytes "
241- fi
242-
243- mdadm --quiet --stop /dev/md/blktests_md
244- fi
245- done
34+ _md_atomics_test " ${SCSI_DEBUG_DEVICES[0]} " " ${SCSI_DEBUG_DEVICES[1]} " \
35+ " ${SCSI_DEBUG_DEVICES[2]} " " ${SCSI_DEBUG_DEVICES[3]} "
24636
24737 _exit_scsi_debug
24838
0 commit comments