[wtf] vtscsi aka virtio_scsi does not see disk at target 7
Andriy Gapon
avg at FreeBSD.org
Thu Jan 16 15:27:54 UTC 2020
I think I see what's going on, but it was a WTF moment for me.
We use virtio_scsi driver on GCE VMs. We typically configure VMs with 6 or less
disks, but recently we started to use VMs with 8+ disks. On some of them, after
a reboot, one disk is missing. Here is an example:
# camcontrol devlist -v
scbus0 on vtscsi0 bus 0:
<Google PersistentDisk 1> at scbus0 target 1 lun 0 (pass0,da0)
<Google PersistentDisk 1> at scbus0 target 2 lun 0 (pass1,da1)
<Google PersistentDisk 1> at scbus0 target 3 lun 0 (pass2,da2)
<Google PersistentDisk 1> at scbus0 target 4 lun 0 (pass3,da3)
<Google PersistentDisk 1> at scbus0 target 5 lun 0 (pass4,da4)
<Google PersistentDisk 1> at scbus0 target 6 lun 0 (pass5,da5)
<Google PersistentDisk 1> at scbus0 target 8 lun 0 (pass6,da6)
<Google PersistentDisk 1> at scbus0 target 9 lun 0 (pass7,da7)
We noticed that it is always target 7 that is missing.
After looking at the code, the problem is kind of obvious.
scsi_scan_bus:
for (i = low_target; i <= max_target; i++) {
cam_status status;
if (i == initiator_id)
continue;
vtscsi_cam_path_inquiry:
cpi->initiator_id = VTSCSI_INITIATOR_ID;
/*
* Specification doesn't say, use traditional SCSI default.
*/
#define VTSCSI_INITIATOR_ID 7
>From what I see, on GCE at least, target 7 is a valid target and it is not
reserved for the initiator. At the same time, I see that target 0 is never used
for disks. Also, it seems that virtio configuration gives 253 as the maximum
target ID on those instances.
I would appreciate any suggestions on what to use for initiator_id in this
driver. Thanks!
--
Andriy Gapon
More information about the freebsd-scsi
mailing list