aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/ulp/isert/ib_isert.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/infiniband/ulp/isert/ib_isert.c')
-rw-r--r--drivers/infiniband/ulp/isert/ib_isert.c31
1 files changed, 10 insertions, 21 deletions
diff --git a/drivers/infiniband/ulp/isert/ib_isert.c b/drivers/infiniband/ulp/isert/ib_isert.c
index 7676bcb7105a..ef73a38bcb6b 100644
--- a/drivers/infiniband/ulp/isert/ib_isert.c
+++ b/drivers/infiniband/ulp/isert/ib_isert.c
@@ -787,14 +787,10 @@ isert_disconnect_work(struct work_struct *work)
787 isert_put_conn(isert_conn); 787 isert_put_conn(isert_conn);
788 return; 788 return;
789 } 789 }
790 if (!isert_conn->logout_posted) { 790
791 pr_debug("Calling rdma_disconnect for !logout_posted from" 791 /* Send DREQ/DREP towards our initiator */
792 " isert_disconnect_work\n"); 792 rdma_disconnect(isert_conn->conn_cm_id);
793 rdma_disconnect(isert_conn->conn_cm_id); 793
794 mutex_unlock(&isert_conn->conn_mutex);
795 iscsit_cause_connection_reinstatement(isert_conn->conn, 0);
796 goto wake_up;
797 }
798 mutex_unlock(&isert_conn->conn_mutex); 794 mutex_unlock(&isert_conn->conn_mutex);
799 795
800wake_up: 796wake_up:
@@ -1822,11 +1818,8 @@ isert_do_control_comp(struct work_struct *work)
1822 break; 1818 break;
1823 case ISTATE_SEND_LOGOUTRSP: 1819 case ISTATE_SEND_LOGOUTRSP:
1824 pr_debug("Calling iscsit_logout_post_handler >>>>>>>>>>>>>>\n"); 1820 pr_debug("Calling iscsit_logout_post_handler >>>>>>>>>>>>>>\n");
1825 /* 1821
1826 * Call atomic_dec(&isert_conn->post_send_buf_count) 1822 atomic_dec(&isert_conn->post_send_buf_count);
1827 * from isert_wait_conn()
1828 */
1829 isert_conn->logout_posted = true;
1830 iscsit_logout_post_handler(cmd, cmd->conn); 1823 iscsit_logout_post_handler(cmd, cmd->conn);
1831 break; 1824 break;
1832 case ISTATE_SEND_TEXTRSP: 1825 case ISTATE_SEND_TEXTRSP:
@@ -2032,6 +2025,8 @@ isert_cq_rx_comp_err(struct isert_conn *isert_conn)
2032 isert_conn->state = ISER_CONN_DOWN; 2025 isert_conn->state = ISER_CONN_DOWN;
2033 mutex_unlock(&isert_conn->conn_mutex); 2026 mutex_unlock(&isert_conn->conn_mutex);
2034 2027
2028 iscsit_cause_connection_reinstatement(isert_conn->conn, 0);
2029
2035 complete(&isert_conn->conn_wait_comp_err); 2030 complete(&isert_conn->conn_wait_comp_err);
2036} 2031}
2037 2032
@@ -3211,15 +3206,9 @@ static void isert_wait_conn(struct iscsi_conn *conn)
3211 struct isert_conn *isert_conn = conn->context; 3206 struct isert_conn *isert_conn = conn->context;
3212 3207
3213 pr_debug("isert_wait_conn: Starting \n"); 3208 pr_debug("isert_wait_conn: Starting \n");
3214 /*
3215 * Decrement post_send_buf_count for special case when called
3216 * from isert_do_control_comp() -> iscsit_logout_post_handler()
3217 */
3218 mutex_lock(&isert_conn->conn_mutex);
3219 if (isert_conn->logout_posted)
3220 atomic_dec(&isert_conn->post_send_buf_count);
3221 3209
3222 if (isert_conn->conn_cm_id && isert_conn->state != ISER_CONN_DOWN) { 3210 mutex_lock(&isert_conn->conn_mutex);
3211 if (isert_conn->conn_cm_id) {
3223 pr_debug("Calling rdma_disconnect from isert_wait_conn\n"); 3212 pr_debug("Calling rdma_disconnect from isert_wait_conn\n");
3224 rdma_disconnect(isert_conn->conn_cm_id); 3213 rdma_disconnect(isert_conn->conn_cm_id);
3225 } 3214 }