From: Nicholas Bellinger <
n...@linux-iscsi.org>
This patch makes isert_disconnect_work() trigger rx/tx thread
pair connection reinstatement, which is required when discovery
sessions for iser don't send a logout request.
Cc: Or Gerlitz <
oger...@mellanox.com>
Signed-off-by: Nicholas Bellinger <
n...@linux-iscsi.org>
---
drivers/infiniband/ulp/isert/ib_isert.c | 3 +++
drivers/target/iscsi/iscsi_target_erl0.c | 1 +
include/target/iscsi/iscsi_transport.h | 4 ++++
3 files changed, 8 insertions(+), 0 deletions(-)
diff --git a/drivers/infiniband/ulp/isert/ib_isert.c b/drivers/infiniband/ulp/isert/ib_isert.c
index 095695b..f02bfcc 100644
--- a/drivers/infiniband/ulp/isert/ib_isert.c
+++ b/drivers/infiniband/ulp/isert/ib_isert.c
@@ -559,6 +559,9 @@ isert_disconnect_work(struct work_struct *work)
pr_debug("Calling rdma_disconnect for !logout_posted from"
" isert_disconnect_work\n");
rdma_disconnect(isert_conn->conn_cm_id);
+ mutex_unlock(&isert_conn->conn_mutex);
+ iscsit_cause_connection_reinstatement(isert_conn->conn, 0);
+ goto wake_up;
}
mutex_unlock(&isert_conn->conn_mutex);
diff --git a/drivers/target/iscsi/iscsi_target_erl0.c b/drivers/target/iscsi/iscsi_target_erl0.c
index 8f074e0..3722f8d 100644
--- a/drivers/target/iscsi/iscsi_target_erl0.c
+++ b/drivers/target/iscsi/iscsi_target_erl0.c
@@ -908,6 +908,7 @@ void iscsit_cause_connection_reinstatement(struct iscsi_conn *conn, int sleep)
wait_for_completion(&conn->conn_wait_comp);
complete(&conn->conn_post_wait_comp);
}
+EXPORT_SYMBOL(iscsit_cause_connection_reinstatement);
void iscsit_fall_back_to_erl0(struct iscsi_session *sess)
{
diff --git a/include/target/iscsi/iscsi_transport.h b/include/target/iscsi/iscsi_transport.h
index ce4070d..e5d09d2 100644
--- a/include/target/iscsi/iscsi_transport.h
+++ b/include/target/iscsi/iscsi_transport.h
@@ -73,6 +73,10 @@ extern int iscsit_logout_post_handler(struct iscsi_cmd *, struct iscsi_conn *);
*/
extern void iscsit_increment_maxcmdsn(struct iscsi_cmd *, struct iscsi_session *);
/*
+ * From iscsi_target_erl0.c
+ */
+extern void iscsit_cause_connection_reinstatement(struct iscsi_conn *, int);
+/*
* From iscsi_target_erl1.c
*/
extern void iscsit_stop_dataout_timer(struct iscsi_cmd *);
--
1.7.2.5