fio has a race between reap_threads() and free_ioengine(). free_ioengine() will call the ioengine's cleanup routine and then dlclose it if it is dynamically linked (like the spdk fio plugin). free_ioengine() does not set td->io_ops = NULL though until after dlclose() is complete. If reap_threads() tries to dereference td->io_ops after our plugin has been closed but before io_ops was set to NULL, it will segfault. Solution (until an upstream fio fix is available) is to use LD_PRELOAD instead. Signed-off-by: Jim Harris <james.r.harris@intel.com> Change-Id: Ide4eb3cb92a636513289107fc211fdf1f98b616f Reviewed-on: https://review.gerrithub.io/365272 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Ziye Yang <optimistyzy@gmail.com>
47 lines
1.0 KiB
Bash
Executable File
47 lines
1.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
testdir=$(readlink -f $(dirname $0))
|
|
rootdir=$(readlink -f $testdir/../../..)
|
|
source $rootdir/scripts/autotest_common.sh
|
|
source $rootdir/test/nvmf/common.sh
|
|
|
|
rpc_py="python $rootdir/scripts/rpc.py"
|
|
|
|
set -e
|
|
|
|
if ! rdma_nic_available; then
|
|
echo "no NIC for nvmf test"
|
|
exit 0
|
|
fi
|
|
|
|
if [ ! -d /usr/src/fio ]; then
|
|
echo "FIO not available"
|
|
exit 0
|
|
fi
|
|
|
|
timing_enter fio
|
|
timing_enter start_nvmf_tgt
|
|
|
|
$NVMF_APP -c $testdir/../nvmf.conf &
|
|
nvmfpid=$!
|
|
|
|
trap "killprocess $nvmfpid; exit 1" SIGINT SIGTERM EXIT
|
|
|
|
waitforlisten $nvmfpid ${RPC_PORT}
|
|
timing_exit start_nvmf_tgt
|
|
|
|
$rpc_py construct_nvmf_subsystem Direct nqn.2016-06.io.spdk:cnode1 'transport:RDMA traddr:192.168.100.8 trsvcid:4420' '' -p "*"
|
|
|
|
PLUGIN_DIR=$rootdir/examples/nvme/fio_plugin
|
|
|
|
LD_PRELOAD=$PLUGIN_DIR/fio_plugin /usr/src/fio/fio $PLUGIN_DIR/example_config.fio --filename="trtype=RDMA adrfam=IPv4 traddr=192.168.100.8 trsvcid=4420 ns=1"
|
|
|
|
sync
|
|
|
|
$rpc_py delete_nvmf_subsystem nqn.2016-06.io.spdk:cnode1
|
|
|
|
trap - SIGINT SIGTERM EXIT
|
|
|
|
killprocess $nvmfpid
|
|
timing_exit fio
|