| #! /bin/bash | 
 | # SPDX-License-Identifier: GPL-2.0 | 
 | # Copyright (c) 2016 Facebook.  All Rights Reserved. | 
 | # | 
 | # FS QA Test 391 | 
 | # | 
 | # Test two threads doing non-overlapping direct I/O in the same extents. | 
 | # Motivated by a bug in Btrfs' direct I/O get_block function which would lead | 
 | # to spurious -EEXIST failures from direct I/O reads. | 
 | # | 
 | . ./common/preamble | 
 | _begin_fstest auto quick rw | 
 |  | 
 | # Override the default cleanup function. | 
 | _cleanup() | 
 | { | 
 | 	cd / | 
 | 	rm -f $tmp.* | 
 | 	rm -f "$testfile" | 
 | } | 
 |  | 
 | # Import common functions. | 
 | . ./common/filter | 
 |  | 
 | # real QA test starts here | 
 |  | 
 | _supported_fs generic | 
 | _require_test | 
 | _require_xfs_io_command "falloc" | 
 | _require_test_program "dio-interleaved" | 
 | _require_odirect | 
 |  | 
 | extent_size="$(($(_get_block_size "$TEST_DIR") * 2))" | 
 | num_extents=1024 | 
 | testfile="$TEST_DIR/$$-testfile" | 
 |  | 
 | $XFS_IO_PROG -fc "truncate 0" "$testfile" | 
 | for ((off = 0; off < num_extents * extent_size; off += extent_size)); do | 
 | 	$XFS_IO_PROG -c "falloc $off $extent_size" "$testfile" | 
 | done | 
 |  | 
 | # To reproduce the Btrfs bug, the extent map must not be cached in memory. | 
 | sync | 
 | echo 3 > /proc/sys/vm/drop_caches | 
 |  | 
 | "$here/src/dio-interleaved" "$extent_size" "$num_extents" "$testfile" | 
 |  | 
 | echo "Silence is golden" | 
 |  | 
 | # success, all done | 
 | status=0 | 
 | exit |