vhost_scsi: implemented vhost device hot-attach

Devices can be added to a SCSI
vhost controller at any time now.

Change-Id: Ic5dd4b78465d3431479e0389b7ea902e1e25c337
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/371281
Reviewed-by: Pawel Wodkowski <pawelx.wodkowski@intel.com>
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
This commit is contained in:
Dariusz Stojaczyk 2017-07-26 12:17:52 +02:00 committed by Daniel Verkamp
parent 1112679f1a
commit f61b71d71a
2 changed files with 27 additions and 1 deletions

View File

@ -724,7 +724,7 @@ spdk_vhost_scsi_dev_add_dev(struct spdk_vhost_dev *vdev, unsigned scsi_dev_num,
return -EINVAL; return -EINVAL;
} }
if (vdev->lcore != -1) { if (vdev->lcore != -1 && !spdk_vhost_dev_has_feature(vdev, VIRTIO_SCSI_F_HOTPLUG)) {
SPDK_ERRLOG("Controller %s is in use and hotplug is not supported\n", vdev->name); SPDK_ERRLOG("Controller %s is in use and hotplug is not supported\n", vdev->name);
return -ENOTSUP; return -ENOTSUP;
} }
@ -751,6 +751,12 @@ spdk_vhost_scsi_dev_add_dev(struct spdk_vhost_dev *vdev, unsigned scsi_dev_num,
return -EINVAL; return -EINVAL;
} }
spdk_scsi_dev_add_port(svdev->scsi_dev[scsi_dev_num], 0, "vhost"); spdk_scsi_dev_add_port(svdev->scsi_dev[scsi_dev_num], 0, "vhost");
if (vdev->lcore != -1) {
spdk_scsi_dev_allocate_io_channels(svdev->scsi_dev[scsi_dev_num]);
eventq_enqueue(svdev, scsi_dev_num, VIRTIO_SCSI_T_TRANSPORT_RESET, VIRTIO_SCSI_EVT_RESET_RESCAN);
}
SPDK_NOTICELOG("Controller %s: defined device '%s' using lun '%s'\n", SPDK_NOTICELOG("Controller %s: defined device '%s' using lun '%s'\n",
vdev->name, dev_name, lun_name); vdev->name, dev_name, lun_name);
return 0; return 0;

View File

@ -250,6 +250,26 @@ done
$COMMON_DIR/vm_run.sh $x --work-dir=$TEST_DIR $used_vms $COMMON_DIR/vm_run.sh $x --work-dir=$TEST_DIR $used_vms
vm_wait_for_boot 600 $used_vms vm_wait_for_boot 600 $used_vms
if [[ $test_type == "spdk_vhost_scsi" ]]; then
for vm_conf in ${vms[@]}; do
IFS=',' read -ra conf <<< "$vm_conf"
while IFS=':' read -ra disks; do
for disk in "${disks[@]}"; do
echo "INFO: Hotdetach test. Trying to remove existing device from a controller naa.$disk.${conf[0]}"
$rpc_py remove_vhost_scsi_dev naa.$disk.${conf[0]} 0
sleep 0.1
echo "INFO: Hotattach test. Re-adding device 0 to naa.$disk.${conf[0]}"
$rpc_py add_vhost_scsi_lun naa.$disk.${conf[0]} 0 $disk
done
done <<< "${conf[2]}"
unset IFS;
done
fi
sleep 0.1
echo "===============" echo "==============="
echo "" echo ""
echo "INFO: Testing..." echo "INFO: Testing..."