xref: /spdk/test/vhost/hotplug/scsi_hotplug.sh (revision 7366e569fbc7dff6dcc6709ffb52a890284de67e)
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/vhost/common.sh
7source $rootdir/test/vhost/hotplug/common.sh
8
9if [[ $scsi_hot_remove_test == 1 ]] && [[ $blk_hot_remove_test == 1 ]]; then
10	notice "Vhost-scsi and vhost-blk hotremove tests cannot be run together"
11fi
12
13# Run spdk by calling run_vhost from hotplug/common.sh.
14# Then prepare vhost with rpc calls and setup and run 4 VMs.
15function pre_hot_attach_detach_test_case() {
16	used_vms=""
17	$rpc_py vhost_create_scsi_controller naa.Nvme0n1p0.0
18	$rpc_py vhost_create_scsi_controller naa.Nvme0n1p1.0
19	$rpc_py vhost_create_scsi_controller naa.Nvme0n1p2.1
20	$rpc_py vhost_create_scsi_controller naa.Nvme0n1p3.1
21	$rpc_py vhost_create_scsi_controller naa.Nvme0n1p4.2
22	$rpc_py vhost_create_scsi_controller naa.Nvme0n1p5.2
23	$rpc_py vhost_create_scsi_controller naa.Nvme0n1p6.3
24	$rpc_py vhost_create_scsi_controller naa.Nvme0n1p7.3
25	$rpc_py vhost_scsi_controller_add_target naa.Nvme0n1p4.2 0 Nvme0n1p8
26	$rpc_py vhost_scsi_controller_add_target naa.Nvme0n1p4.2 1 Nvme0n1p9
27	$rpc_py vhost_scsi_controller_add_target naa.Nvme0n1p5.2 0 Nvme0n1p10
28	$rpc_py vhost_scsi_controller_add_target naa.Nvme0n1p5.2 1 Nvme0n1p11
29	$rpc_py vhost_scsi_controller_add_target naa.Nvme0n1p6.3 0 Nvme0n1p12
30	$rpc_py vhost_scsi_controller_add_target naa.Nvme0n1p6.3 1 Nvme0n1p13
31	$rpc_py vhost_scsi_controller_add_target naa.Nvme0n1p7.3 0 Nvme0n1p14
32	$rpc_py vhost_scsi_controller_add_target naa.Nvme0n1p7.3 1 Nvme0n1p15
33	vms_setup_and_run "0 1 2 3"
34	vms_prepare "0 1 2 3"
35}
36
37function clear_vhost_config() {
38	$rpc_py vhost_scsi_controller_remove_target naa.Nvme0n1p4.2 0
39	$rpc_py vhost_scsi_controller_remove_target naa.Nvme0n1p4.2 1
40	$rpc_py vhost_scsi_controller_remove_target naa.Nvme0n1p5.2 0
41	$rpc_py vhost_scsi_controller_remove_target naa.Nvme0n1p5.2 1
42	$rpc_py vhost_scsi_controller_remove_target naa.Nvme0n1p6.3 0
43	$rpc_py vhost_scsi_controller_remove_target naa.Nvme0n1p6.3 1
44	$rpc_py vhost_scsi_controller_remove_target naa.Nvme0n1p7.3 0
45	$rpc_py vhost_scsi_controller_remove_target naa.Nvme0n1p7.3 1
46	$rpc_py vhost_delete_controller naa.Nvme0n1p0.0
47	$rpc_py vhost_delete_controller naa.Nvme0n1p1.0
48	$rpc_py vhost_delete_controller naa.Nvme0n1p2.1
49	$rpc_py vhost_delete_controller naa.Nvme0n1p3.1
50	$rpc_py vhost_delete_controller naa.Nvme0n1p4.2
51	$rpc_py vhost_delete_controller naa.Nvme0n1p5.2
52	$rpc_py vhost_delete_controller naa.Nvme0n1p6.3
53	$rpc_py vhost_delete_controller naa.Nvme0n1p7.3
54}
55
56trap 'error_exit "${FUNCNAME}" "${LINENO}"' ERR
57# Hotremove/hotattach/hotdetach test cases prerequisites
58# Run vhost with 2 NVMe disks.
59
60notice "==============="
61notice ""
62notice "running SPDK"
63notice ""
64vhost_run -n 0
65$rpc_py bdev_nvme_set_hotplug -e
66$rpc_py bdev_split_create Nvme0n1 16
67$rpc_py bdev_malloc_create 128 512 -b Malloc
68$rpc_py bdev_split_create Malloc 4
69$rpc_py bdev_split_create HotInNvme0n1 2
70$rpc_py bdev_split_create HotInNvme1n1 2
71$rpc_py bdev_split_create HotInNvme2n1 2
72$rpc_py bdev_split_create HotInNvme3n1 2
73$rpc_py bdev_get_bdevs
74
75if [[ $scsi_hot_remove_test == 0 ]] && [[ $blk_hot_remove_test == 0 ]]; then
76	pre_hot_attach_detach_test_case
77	$testdir/scsi_hotattach.sh --fio-bin=$fio_bin &
78	first_script=$!
79	$testdir/scsi_hotdetach.sh --fio-bin=$fio_bin &
80	second_script=$!
81	wait $first_script
82	wait $second_script
83	vm_shutdown_all
84	clear_vhost_config
85fi
86if [[ $scsi_hot_remove_test == 1 ]]; then
87	source $testdir/scsi_hotremove.sh
88fi
89if [[ $blk_hot_remove_test == 1 ]]; then
90	source $testdir/blk_hotremove.sh
91fi
92post_test_case
93