Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
Pull SCSI fixes from James Bottomley: "Two simple fixes, both of which cause I/O hangs. The storvsc one is from the hyper-v which can hang under certain hot add/remove conditions and the other is generally, where removing a target and a device in close proximity can result in the release method being executed twice (and subsequent list and other corruption and an eventual panic)" * tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: scsi: storvsc: Fix scsi_cmd error assignments in storvsc_handle_error scsi: core: check for device state in __scsi_remove_target()
This commit is contained in:
@@ -1415,7 +1415,10 @@ static void __scsi_remove_target(struct scsi_target *starget)
|
||||
* check.
|
||||
*/
|
||||
if (sdev->channel != starget->channel ||
|
||||
sdev->id != starget->id ||
|
||||
sdev->id != starget->id)
|
||||
continue;
|
||||
if (sdev->sdev_state == SDEV_DEL ||
|
||||
sdev->sdev_state == SDEV_CANCEL ||
|
||||
!get_device(&sdev->sdev_gendev))
|
||||
continue;
|
||||
spin_unlock_irqrestore(shost->host_lock, flags);
|
||||
|
||||
@@ -953,10 +953,11 @@ static void storvsc_handle_error(struct vmscsi_request *vm_srb,
|
||||
case TEST_UNIT_READY:
|
||||
break;
|
||||
default:
|
||||
set_host_byte(scmnd, DID_TARGET_FAILURE);
|
||||
set_host_byte(scmnd, DID_ERROR);
|
||||
}
|
||||
break;
|
||||
case SRB_STATUS_INVALID_LUN:
|
||||
set_host_byte(scmnd, DID_NO_CONNECT);
|
||||
do_work = true;
|
||||
process_err_fn = storvsc_remove_lun;
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user