diff options
author | Bart Van Assche <bvanassche@acm.org> | 2013-02-21 12:18:00 -0500 |
---|---|---|
committer | Roland Dreier <roland@purestorage.com> | 2013-02-25 12:31:14 -0500 |
commit | 3780d1f08856f692116bcf026e4acf1c521df1c7 (patch) | |
tree | 0d7c14403767836e3dae755e836b2dfcf53cde15 /drivers/infiniband/ulp/srp/ib_srp.c | |
parent | e1b2f13aba9ff714d23ecd4a950e744ee7ad72e1 (diff) |
IB/srp: Avoid sending a task management function needlessly
Do not send a task management function if sending will fail anyway
because either there is no RDMA/RC connection or the QP is in the
error state.
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Acked-by: David Dillow <dave@thedillows.org>
Cc: <stable@vger.kernel.org> # 3.8
Signed-off-by: Roland Dreier <roland@purestorage.com>
Diffstat (limited to 'drivers/infiniband/ulp/srp/ib_srp.c')
-rw-r--r-- | drivers/infiniband/ulp/srp/ib_srp.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c index 94f76b9319c1..263325848462 100644 --- a/drivers/infiniband/ulp/srp/ib_srp.c +++ b/drivers/infiniband/ulp/srp/ib_srp.c | |||
@@ -1695,6 +1695,9 @@ static int srp_send_tsk_mgmt(struct srp_target_port *target, | |||
1695 | struct srp_iu *iu; | 1695 | struct srp_iu *iu; |
1696 | struct srp_tsk_mgmt *tsk_mgmt; | 1696 | struct srp_tsk_mgmt *tsk_mgmt; |
1697 | 1697 | ||
1698 | if (!target->connected || target->qp_in_error) | ||
1699 | return -1; | ||
1700 | |||
1698 | init_completion(&target->tsk_mgmt_done); | 1701 | init_completion(&target->tsk_mgmt_done); |
1699 | 1702 | ||
1700 | spin_lock_irq(&target->lock); | 1703 | spin_lock_irq(&target->lock); |
@@ -1754,8 +1757,6 @@ static int srp_reset_device(struct scsi_cmnd *scmnd) | |||
1754 | 1757 | ||
1755 | shost_printk(KERN_ERR, target->scsi_host, "SRP reset_device called\n"); | 1758 | shost_printk(KERN_ERR, target->scsi_host, "SRP reset_device called\n"); |
1756 | 1759 | ||
1757 | if (target->qp_in_error) | ||
1758 | return FAILED; | ||
1759 | if (srp_send_tsk_mgmt(target, SRP_TAG_NO_REQ, scmnd->device->lun, | 1760 | if (srp_send_tsk_mgmt(target, SRP_TAG_NO_REQ, scmnd->device->lun, |
1760 | SRP_TSK_LUN_RESET)) | 1761 | SRP_TSK_LUN_RESET)) |
1761 | return FAILED; | 1762 | return FAILED; |