In a test with device unmapping/deletion for rdac device handler, a problems comes up with rdac checker improperly marking all device path as active state after device is unmapped from the host.
If a device is unmapped from a storage array to a host, peripheral qualifier files in the standard inquiry indicates no connected logical unit, although command can go through with success status.
TUR command would fail with sense code 0x59100, sense key: illegal request, additional sense: logical unit not supported.
VPD inquiry such as volume access control inquiry can succeed also, but it has a peripheral qualifier field to indicate the device is not there.
RDAC checker uses VPD page 0xC9, however it only checks the return status, which is good even after device is unmapped. That results in RDAC checker restoring the paths to good state even after device is unmapped.
So, after a device is unmapped, >> mode select queue to fail over to the other controller >> mode select command failed with 0x59100 >> rdac checker restored the path>> mode select tried again.
All the paths for the unmapped device are shown as "active" instead of "failed".
We should add a simple check for peripheral qualifier in 0xC9 inquiry after inquiry result comes back, to determine is the logical unit is not connected anymore. If the device is either unmapped or deleted, we can trigger sysfs to remove the device. Or at least, we can mark all paths as failed or offlined. The changes would be like
If (peripheral qualifier != device not connected && inquiry succeeds)
report path up
report path down