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