1#!/usr/bin/env bash 2# SPDX-License-Identifier: BSD-3-Clause 3# Copyright (C) 2021 Intel Corporation 4# All rights reserved. 5# 6 7testdir=$(readlink -f "$(dirname "$0")") 8rootdir=$(readlink -f "$testdir/../../../") 9 10# Set defaults we want to work with 11set -- "--transport=tcp" "--iso" "$@" 12 13source "$rootdir/test/common/autotest_common.sh" 14source "$rootdir/test/nvmf/common.sh" 15 16rabort() { 17 local trtype=$1 18 local adrfam=$2 19 local traddr=$3 20 local trsvcid=$4 21 local subnqn=$5 22 23 local qds qd 24 local target r 25 26 qds=(4 24 64) 27 28 for r in trtype adrfam traddr trsvcid subnqn; do 29 target=${target:+$target }$r:${!r} 30 done 31 32 for qd in "${qds[@]}"; do 33 "$SPDK_EXAMPLE_DIR/abort" \ 34 -q "$qd" \ 35 -w rw \ 36 -M 50 \ 37 -o 4096 \ 38 -r "$target" 39 done 40} 41 42spdk_target() { 43 local name=spdk_target 44 45 rpc_cmd bdev_nvme_attach_controller -t pcie -a "$nvme" -b "$name" 46 47 rpc_cmd nvmf_create_transport $NVMF_TRANSPORT_OPTS -u 8192 48 rpc_cmd nvmf_create_subsystem "$NVME_SUBNQN" -a -s "$NVMF_SERIAL" 49 rpc_cmd nvmf_subsystem_add_ns "$NVME_SUBNQN" "${name}n1" 50 rpc_cmd nvmf_subsystem_add_listener "$NVME_SUBNQN" -t "$TEST_TRANSPORT" -a "$NVMF_FIRST_TARGET_IP" -s "$NVMF_PORT" 51 52 rabort "$TEST_TRANSPORT" IPv4 "$NVMF_FIRST_TARGET_IP" "$NVMF_PORT" "$NVME_SUBNQN" 53 54 rpc_cmd nvmf_delete_subsystem "$NVME_SUBNQN" 55 rpc_cmd bdev_nvme_detach_controller "$name" 56 57 # Make sure we fully detached from the ctrl as vfio-pci won't be able to release the 58 # device otherwise - we can either wait a bit or simply kill the app. Since we don't 59 # really need it at this point, reap it but leave the net setup around. See: 60 # https://github.com/spdk/spdk/issues/2811 61 killprocess "$nvmfpid" 62} 63 64kernel_target() { 65 configure_kernel_target "$NVME_SUBNQN" "$(get_main_ns_ip)" 66 rabort "$TEST_TRANSPORT" IPv4 "$NVMF_INITIATOR_IP" "$NVMF_PORT" "$NVME_SUBNQN" 67 clean_kernel_target 68} 69 70nvmftestinit 71nvmfappstart -m 0xf 72 73trap 'process_shm --id $NVMF_APP_SHM_ID || :; nvmftestfini || :; clean_kernel_target' SIGINT SIGTERM EXIT 74 75mapfile -t nvmes < <(nvme_in_userspace) 76((${#nvmes[@]} > 0)) 77 78nvme=${nvmes[0]} 79 80run_test "spdk_target_abort" spdk_target 81run_test "kernel_target_abort" kernel_target 82 83trap - SIGINT SIGTERM EXIT 84nvmftestfini 85