| From 364189f0ada5478e4faf8a552d6071a650d757cd Mon Sep 17 00:00:00 2001 |
| From: Sagi Grimberg <sagig@mellanox.com> |
| Date: Sun, 29 Mar 2015 15:52:03 +0300 |
| Subject: iser-target: Fix session hang in case of an rdma read DIF error |
| |
| From: Sagi Grimberg <sagig@mellanox.com> |
| |
| commit 364189f0ada5478e4faf8a552d6071a650d757cd upstream. |
| |
| This hang was a result of a missing command put when |
| a DIF error occurred during a rdma read (and we sent |
| an CHECK_CONDITION error without passing it to the |
| backend). |
| |
| Signed-off-by: Sagi Grimberg <sagig@mellanox.com> |
| Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/infiniband/ulp/isert/ib_isert.c | 6 ++++-- |
| 1 file changed, 4 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/infiniband/ulp/isert/ib_isert.c |
| +++ b/drivers/infiniband/ulp/isert/ib_isert.c |
| @@ -1861,11 +1861,13 @@ isert_completion_rdma_read(struct iser_t |
| cmd->i_state = ISTATE_RECEIVED_LAST_DATAOUT; |
| spin_unlock_bh(&cmd->istate_lock); |
| |
| - if (ret) |
| + if (ret) { |
| + target_put_sess_cmd(se_cmd->se_sess, se_cmd); |
| transport_send_check_condition_and_sense(se_cmd, |
| se_cmd->pi_err, 0); |
| - else |
| + } else { |
| target_execute_cmd(se_cmd); |
| + } |
| } |
| |
| static void |