xref: /spdk/test/nvmf/target/filesystem.sh (revision b30d57cdad6d2bc75cc1e4e2ebbcebcb0d98dcfa)
1#!/usr/bin/env bash
2
3testdir=$(readlink -f $(dirname $0))
4rootdir=$(readlink -f $testdir/../../..)
5source $rootdir/test/common/autotest_common.sh
6source $rootdir/test/nvmf/common.sh
7
8MALLOC_BDEV_SIZE=64
9MALLOC_BLOCK_SIZE=512
10
11rpc_py="$rootdir/scripts/rpc.py"
12
13nvmftestinit
14
15function nvmf_filesystem_create() {
16	fstype=$1
17	nvme_name=$2
18
19	make_filesystem ${fstype} /dev/${nvme_name}p1
20
21	mount /dev/${nvme_name}p1 /mnt/device
22	touch /mnt/device/aaa
23	sync
24	rm /mnt/device/aaa
25	sync
26
27	i=0
28	while ! umount /mnt/device; do
29		[ $i -lt 15 ] || break
30		i=$((i + 1))
31		sleep 1
32	done
33
34	# Make sure the target did not crash
35	kill -0 $nvmfpid
36
37	# Make sure the device is still present
38	lsblk -l -o NAME | grep -q -w "${nvme_name}"
39
40	# Make sure the partition is still present
41	lsblk -l -o NAME | grep -q -w "${nvme_name}p1"
42}
43
44function nvmf_filesystem_part() {
45	incapsule=$1
46
47	nvmfappstart -m 0xF
48
49	$rpc_py nvmf_create_transport $NVMF_TRANSPORT_OPTS -u 8192 -c $incapsule
50	$rpc_py bdev_malloc_create $MALLOC_BDEV_SIZE $MALLOC_BLOCK_SIZE -b Malloc1
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 Malloc1
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	nvme connect -t $TEST_TRANSPORT -n "nqn.2016-06.io.spdk:cnode1" -a "$NVMF_FIRST_TARGET_IP" -s "$NVMF_PORT"
56
57	waitforserial "$NVMF_SERIAL"
58	nvme_name=$(lsblk -l -o NAME,SERIAL | grep -oP "([\w]*)(?=\s+${NVMF_SERIAL})")
59
60	mkdir -p /mnt/device
61
62	parted -s /dev/${nvme_name} mklabel msdos mkpart primary '0%' '100%'
63	partprobe
64	sleep 1
65
66	if [ $incapsule -eq 0 ]; then
67		run_test "filesystem_ext4" nvmf_filesystem_create "ext4" ${nvme_name}
68		run_test "filesystem_btrfs" nvmf_filesystem_create "btrfs" ${nvme_name}
69		run_test "filesystem_xfs" nvmf_filesystem_create "xfs" ${nvme_name}
70	else
71		run_test "filesystem_incapsule_ext4" nvmf_filesystem_create "ext4" ${nvme_name}
72		run_test "filesystem_incapsule_btrfs" nvmf_filesystem_create "btrfs" ${nvme_name}
73		run_test "filesystem_incapsule_xfs" nvmf_filesystem_create "xfs" ${nvme_name}
74	fi
75
76	parted -s /dev/${nvme_name} rm 1
77
78	sync
79	nvme disconnect -n "nqn.2016-06.io.spdk:cnode1" || true
80
81	$rpc_py nvmf_delete_subsystem nqn.2016-06.io.spdk:cnode1
82
83	trap - SIGINT SIGTERM EXIT
84
85	killprocess $nvmfpid
86	nvmfpid=
87}
88
89run_test "nvmf_filesystem_no_incapsule" nvmf_filesystem_part 0
90run_test "nvmf_filesystem_incapsule" nvmf_filesystem_part 4096
91
92nvmftestfini
93