File tree Expand file tree Collapse file tree 1 file changed +10
-1
lines changed
Expand file tree Collapse file tree 1 file changed +10
-1
lines changed Original file line number Diff line number Diff line change @@ -534,7 +534,9 @@ static int virtscsi_queuecommand(struct virtio_scsi *vscsi,
534534{
535535 struct Scsi_Host * shost = virtio_scsi_host (vscsi -> vdev );
536536 struct virtio_scsi_cmd * cmd = scsi_cmd_priv (sc );
537+ unsigned long flags ;
537538 int req_size ;
539+ int ret ;
538540
539541 BUG_ON (scsi_sg_count (sc ) > shost -> sg_tablesize );
540542
@@ -562,8 +564,15 @@ static int virtscsi_queuecommand(struct virtio_scsi *vscsi,
562564 req_size = sizeof (cmd -> req .cmd );
563565 }
564566
565- if (virtscsi_kick_cmd (req_vq , cmd , req_size , sizeof (cmd -> resp .cmd )) != 0 )
567+ ret = virtscsi_kick_cmd (req_vq , cmd , req_size , sizeof (cmd -> resp .cmd ));
568+ if (ret == - EIO ) {
569+ cmd -> resp .cmd .response = VIRTIO_SCSI_S_BAD_TARGET ;
570+ spin_lock_irqsave (& req_vq -> vq_lock , flags );
571+ virtscsi_complete_cmd (vscsi , cmd );
572+ spin_unlock_irqrestore (& req_vq -> vq_lock , flags );
573+ } else if (ret != 0 ) {
566574 return SCSI_MLQUEUE_HOST_BUSY ;
575+ }
567576 return 0 ;
568577}
569578
You can’t perform that action at this time.
0 commit comments