freebsd-dev/sys/dev/hyperv
Dexuan Cui 0d880ef422 hyperv/storvsc: storvsc_io_done(): do not use CAM_SEL_TIMEOUT
CAM_SEL_TIMEOUT was introduced in
https://reviews.freebsd.org/D7521 (r304251), which claimed:

"VM shall response to CAM layer with CAM_SEL_TIMEOUT to filter those
invalid LUNs. Never use CAM_DEV_NOT_THERE which will block LUN scan
for LUN number higher than 7."

But it turns out this is not correct:

I think what really filters the invalid LUNs in r304251 is that:
before r304251, we could set the CAM_REQ_CMP without checking
vm_srb->srb_status at all:
ccb->ccb_h.status |= CAM_REQ_CMP.

r304251 checks vm_srb->srb_status and sets ccb->ccb_h.status properly,
so the invalid LUNs are filtered.

I changed my code version to r304251 but replaced the CAM_SEL_TIMEOUT
with CAM_DEV_NOT_THERE, and I confirmed the invalid LUNs can also be
filtered, and I successfully hot-added and hot-removed 8 disks to/from
the VM without any issue.

CAM_SEL_TIMEOUT has an unwanted side effect -- see cam_periph_error():
For a selection timeout, we consider all of the LUNs on
the target to be gone. If the status is CAM_DEV_NOT_THERE,
then we only get rid of the device(s) specified by the
path in the original CCB.

This means: for a VM with a valid LUN on 3:0:0:0, when the VM inquires
3:0:0:1 and the host reports 3:0:0:1 doesn't exist and storvsc returns
CAM_SEL_TIMEOUT to the CAM layer, CAM will detech 3:0:0:0 as well: this
is the bug I reported recently:
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=226583

PR:	226583
Reviewed by:	mav
MFC after:	1 week
Sponsored by:	Microsoft
Differential Revision:	https://reviews.freebsd.org/D14690
2018-04-10 18:05:02 +00:00
..
include sys/dev: further adoption of SPDX licensing ID tags. 2017-11-27 14:52:40 +00:00
input hyperv/input: Remove unnecessary inclusion. 2017-06-30 03:01:22 +00:00
netvsc hyperv/hn: Enable transparent VF by default. 2017-10-11 05:28:51 +00:00
pcib hyperv: Update copyright for the files changed in 2017 2017-08-14 06:00:50 +00:00
storvsc hyperv/storvsc: storvsc_io_done(): do not use CAM_SEL_TIMEOUT 2018-04-10 18:05:02 +00:00
utilities sys/dev: further adoption of SPDX licensing ID tags. 2017-11-27 14:52:40 +00:00
vmbus Correct comment typo in Hyper-V 2018-03-30 02:25:12 +00:00