1#!/usr/bin/env bash 2 3testdir=$(readlink -f $(dirname $0)) 4rootdir=$(readlink -f $testdir/../../..) 5source $rootdir/test/setup/common.sh 6source $rootdir/test/common/autotest_common.sh 7source $rootdir/test/nvmf/common.sh 8 9MALLOC_BDEV_SIZE=128 10MALLOC_BLOCK_SIZE=512 11 12nvmftestinit 13 14function nvmf_filesystem_create() { 15 fstype=$1 16 nvme_name=$2 17 18 make_filesystem ${fstype} /dev/${nvme_name}p1 19 20 mount /dev/${nvme_name}p1 /mnt/device 21 touch /mnt/device/aaa 22 sync 23 rm /mnt/device/aaa 24 sync 25 26 i=0 27 while ! umount /mnt/device; do 28 [ $i -lt 15 ] || break 29 i=$((i + 1)) 30 sleep 1 31 done 32 33 # Make sure the target did not crash 34 kill -0 $nvmfpid 35 36 # Make sure the device is still present 37 lsblk -l -o NAME | grep -q -w "${nvme_name}" 38 39 # Make sure the partition is still present 40 lsblk -l -o NAME | grep -q -w "${nvme_name}p1" 41} 42 43function nvmf_filesystem_part() { 44 in_capsule=$1 45 46 nvmfappstart -m 0xF 47 malloc_name=Malloc1 48 49 $rpc_py nvmf_create_transport $NVMF_TRANSPORT_OPTS -u 8192 -c $in_capsule 50 $rpc_py bdev_malloc_create $MALLOC_BDEV_SIZE $MALLOC_BLOCK_SIZE -b $malloc_name 51 $rpc_py nvmf_create_subsystem nqn.2016-06.io.spdk:cnode1 -a -s $NVMF_SERIAL 52 $rpc_py nvmf_subsystem_add_ns nqn.2016-06.io.spdk:cnode1 $malloc_name 53 $rpc_py nvmf_subsystem_add_listener nqn.2016-06.io.spdk:cnode1 -t $TEST_TRANSPORT -a $NVMF_FIRST_TARGET_IP -s $NVMF_PORT 54 55 malloc_size=$(($(get_bdev_size $malloc_name) * 1024 * 1024)) 56 57 nvme connect -t $TEST_TRANSPORT -n "nqn.2016-06.io.spdk:cnode1" -a "$NVMF_FIRST_TARGET_IP" -s "$NVMF_PORT" 58 59 waitforserial "$NVMF_SERIAL" 60 nvme_name=$(lsblk -l -o NAME,SERIAL | grep -oP "([\w]*)(?=\s+${NVMF_SERIAL})") 61 nvme_size=$(sec_size_to_bytes $nvme_name) 62 63 mkdir -p /mnt/device 64 if ((nvme_size == malloc_size)); then 65 parted -s /dev/${nvme_name} mklabel gpt mkpart SPDK_TEST '0%' '100%' 66 partprobe 67 sleep 1 68 else 69 echo "ERR: Created dev size is not as expected" 70 exit 1 71 fi 72 73 if [ $in_capsule -eq 0 ]; then 74 run_test "filesystem_ext4" nvmf_filesystem_create "ext4" ${nvme_name} 75 run_test "filesystem_btrfs" nvmf_filesystem_create "btrfs" ${nvme_name} 76 run_test "filesystem_xfs" nvmf_filesystem_create "xfs" ${nvme_name} 77 else 78 run_test "filesystem_in_capsule_ext4" nvmf_filesystem_create "ext4" ${nvme_name} 79 run_test "filesystem_in_capsule_btrfs" nvmf_filesystem_create "btrfs" ${nvme_name} 80 run_test "filesystem_in_capsule_xfs" nvmf_filesystem_create "xfs" ${nvme_name} 81 fi 82 83 parted -s /dev/${nvme_name} rm 1 84 85 sync 86 nvme disconnect -n "nqn.2016-06.io.spdk:cnode1" || true 87 waitforserial_disconnect "$NVMF_SERIAL" 88 89 $rpc_py nvmf_delete_subsystem nqn.2016-06.io.spdk:cnode1 90 91 trap - SIGINT SIGTERM EXIT 92 93 killprocess $nvmfpid 94 nvmfpid= 95} 96 97run_test "nvmf_filesystem_no_in_capsule" nvmf_filesystem_part 0 98run_test "nvmf_filesystem_in_capsule" nvmf_filesystem_part 4096 99 100nvmftestfini 101