xref: /spdk/test/nvmf/target/filesystem.sh (revision a6dbe3721eb3b5990707fc3e378c95e505dd8ab5)
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