pr_debug("Closing iSCSI connection CID %hu on SID:"
                " %u\n", conn->cid, sess->sid);
        /*
 -       * Always up conn_logout_comp just in case the RX Thread is sleeping
 -       * and the logout response never got sent because the connection
 -       * failed.
 +       * Always up conn_logout_comp for the traditional TCP case just in case
 +       * the RX Thread in iscsi_target_rx_opcode() is sleeping and the logout
 +       * response never got sent because the connection failed.
 +       *
 +       * However for iser-target, isert_wait4logout() is using conn_logout_comp
 +       * to signal logout response TX interrupt completion.  Go ahead and skip
 +       * this for iser since isert_rx_opcode() does not wait on logout failure,
 +       * and to avoid iscsi_conn pointer dereference in iser-target code.
         */
 -      complete(&conn->conn_logout_comp);
 +      if (conn->conn_transport->transport_type == ISCSI_TCP)
 +              complete(&conn->conn_logout_comp);
  
-       iscsi_release_thread_set(conn);
+       if (!strcmp(current->comm, ISCSI_RX_THREAD_NAME)) {
+               if (conn->tx_thread &&
+                   cmpxchg(&conn->tx_thread_active, true, false)) {
+                       send_sig(SIGINT, conn->tx_thread, 1);
+                       kthread_stop(conn->tx_thread);
+               }
+       } else if (!strcmp(current->comm, ISCSI_TX_THREAD_NAME)) {
+               if (conn->rx_thread &&
+                   cmpxchg(&conn->rx_thread_active, true, false)) {
+                       send_sig(SIGINT, conn->rx_thread, 1);
+                       kthread_stop(conn->rx_thread);
+               }
+       }
+ 
+       spin_lock(&iscsit_global->ts_bitmap_lock);
+       bitmap_release_region(iscsit_global->ts_bitmap, conn->bitmap_id,
+                             get_order(1));
+       spin_unlock(&iscsit_global->ts_bitmap_lock);
  
        iscsit_stop_timers_for_cmds(conn);
        iscsit_stop_nopin_response_timer(conn);