scsi: virtio-scsi: Correctly handle the case where all LUNs are unplugged

Commit 5ff8437214 ("scsi: virtio_scsi: unplug LUNs when events missed")
missed a corner case in which all the LUNs are unplugged at the same time.

In this case INQUIRY returns DID_BAD_TARGET. Detect this and unplug the
LUN.

Link: https://lore.kernel.org/r/20200729194806.4933-2-mlevitsk@redhat.com
Acked-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
Maxim Levitsky 2020-07-29 22:48:06 +03:00 committed by Martin K. Petersen
parent fc13638ae9
commit bb2e331468

View File

@ -350,6 +350,14 @@ static void virtscsi_rescan_hotunplug(struct virtio_scsi *vscsi)
if (result == 0 && inq_result[0] >> 5) {
/* PQ indicates the LUN is not attached */
scsi_remove_device(sdev);
} else if (host_byte(result) == DID_BAD_TARGET) {
/*
* If all LUNs of a virtio-scsi device are unplugged
* it will respond with BAD TARGET on any INQUIRY
* command.
* Remove the device in this case as well.
*/
scsi_remove_device(sdev);
}
}