diff options
Diffstat (limited to 'drivers/infiniband/ulp/srp/ib_srp.c')
| -rw-r--r-- | drivers/infiniband/ulp/srp/ib_srp.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c index 8a7eb9f98a0c..7ccf3284dda3 100644 --- a/drivers/infiniband/ulp/srp/ib_srp.c +++ b/drivers/infiniband/ulp/srp/ib_srp.c | |||
| @@ -734,6 +734,7 @@ static int srp_reconnect_target(struct srp_target_port *target) | |||
| 734 | 734 | ||
| 735 | scsi_target_unblock(&shost->shost_gendev, ret == 0 ? SDEV_RUNNING : | 735 | scsi_target_unblock(&shost->shost_gendev, ret == 0 ? SDEV_RUNNING : |
| 736 | SDEV_TRANSPORT_OFFLINE); | 736 | SDEV_TRANSPORT_OFFLINE); |
| 737 | target->transport_offline = !!ret; | ||
| 737 | 738 | ||
| 738 | if (ret) | 739 | if (ret) |
| 739 | goto err; | 740 | goto err; |
| @@ -1353,6 +1354,12 @@ static int srp_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *scmnd) | |||
| 1353 | unsigned long flags; | 1354 | unsigned long flags; |
| 1354 | int len; | 1355 | int len; |
| 1355 | 1356 | ||
| 1357 | if (unlikely(target->transport_offline)) { | ||
| 1358 | scmnd->result = DID_NO_CONNECT << 16; | ||
| 1359 | scmnd->scsi_done(scmnd); | ||
| 1360 | return 0; | ||
| 1361 | } | ||
| 1362 | |||
| 1356 | spin_lock_irqsave(&target->lock, flags); | 1363 | spin_lock_irqsave(&target->lock, flags); |
| 1357 | iu = __srp_get_tx_iu(target, SRP_IU_CMD); | 1364 | iu = __srp_get_tx_iu(target, SRP_IU_CMD); |
| 1358 | if (!iu) | 1365 | if (!iu) |
