From 10874dfd992b5af027e905837aef6313b31d18b9 Mon Sep 17 00:00:00 2001 From: Maurizio Lombardi Date: Fri, 1 Oct 2021 12:11:39 +0200 Subject: [PATCH] target: simplify the conn completion Signed-off-by: Maurizio Lombardi --- drivers/target/iscsi/iscsi_target.c | 25 +---------------------- drivers/target/iscsi/iscsi_target_erl0.c | 6 +----- drivers/target/iscsi/iscsi_target_login.c | 2 -- drivers/target/iscsi/iscsi_target_util.c | 3 --- include/target/iscsi/iscsi_target_core.h | 4 ---- 5 files changed, 2 insertions(+), 38 deletions(-) diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c index 4936188b109c..cfecaed48653 100644 --- a/drivers/target/iscsi/iscsi_target.c +++ b/drivers/target/iscsi/iscsi_target.c @@ -4230,34 +4230,11 @@ int iscsit_close_connection( spin_unlock_bh(&sess->conn_lock); - /* - * If connection reinstatement is being performed on this connection, - * up the connection reinstatement semaphore that is being blocked on - * in iscsit_cause_connection_reinstatement(). - */ spin_lock_bh(&conn->state_lock); - if (atomic_read(&conn->sleep_on_conn_wait_comp)) { - spin_unlock_bh(&conn->state_lock); - complete(&conn->conn_wait_comp); - wait_for_completion(&conn->conn_post_wait_comp); - spin_lock_bh(&conn->state_lock); - } - - /* - * If connection reinstatement is being performed on this connection - * by receiving a REMOVECONNFORRECOVERY logout request, up the - * connection wait rcfr semaphore that is being blocked on - * an iscsit_connection_reinstatement_rcfr(). - */ - if (atomic_read(&conn->connection_wait_rcfr)) { - spin_unlock_bh(&conn->state_lock); - complete(&conn->conn_wait_rcfr_comp); - wait_for_completion(&conn->conn_post_wait_comp); - spin_lock_bh(&conn->state_lock); - } atomic_set(&conn->connection_reinstatement, 1); spin_unlock_bh(&conn->state_lock); + complete_all(&conn->conn_wait_comp); /* * If any other processes are accessing this connection pointer we * must wait until they have completed. diff --git a/drivers/target/iscsi/iscsi_target_erl0.c b/drivers/target/iscsi/iscsi_target_erl0.c index b3290da64177..4d28c9851530 100644 --- a/drivers/target/iscsi/iscsi_target_erl0.c +++ b/drivers/target/iscsi/iscsi_target_erl0.c @@ -847,8 +847,7 @@ void iscsit_connection_reinstatement_rcfr(struct iscsi_conn *conn) send_sig(SIGINT, conn->rx_thread, 1); sleep: - wait_for_completion(&conn->conn_wait_rcfr_comp); - complete(&conn->conn_post_wait_comp); + wait_for_completion(&conn->conn_wait_comp); } void iscsit_cause_connection_reinstatement(struct iscsi_conn *conn, int sleep) @@ -879,12 +878,9 @@ void iscsit_cause_connection_reinstatement(struct iscsi_conn *conn, int sleep) spin_unlock_bh(&conn->state_lock); return; } - - atomic_set(&conn->sleep_on_conn_wait_comp, 1); spin_unlock_bh(&conn->state_lock); wait_for_completion(&conn->conn_wait_comp); - complete(&conn->conn_post_wait_comp); } EXPORT_SYMBOL(iscsit_cause_connection_reinstatement); diff --git a/drivers/target/iscsi/iscsi_target_login.c b/drivers/target/iscsi/iscsi_target_login.c index ef7c7db1128b..742187f8be83 100644 --- a/drivers/target/iscsi/iscsi_target_login.c +++ b/drivers/target/iscsi/iscsi_target_login.c @@ -1111,9 +1111,7 @@ static struct iscsi_conn *iscsit_alloc_conn(struct iscsi_np *np) INIT_LIST_HEAD(&conn->conn_cmd_list); INIT_LIST_HEAD(&conn->immed_queue_list); INIT_LIST_HEAD(&conn->response_queue_list); - init_completion(&conn->conn_post_wait_comp); init_completion(&conn->conn_wait_comp); - init_completion(&conn->conn_wait_rcfr_comp); init_completion(&conn->conn_waiting_on_uc_comp); init_completion(&conn->conn_logout_comp); init_completion(&conn->rx_half_close_comp); diff --git a/drivers/target/iscsi/iscsi_target_util.c b/drivers/target/iscsi/iscsi_target_util.c index 1e35181d6867..37ea5c7e244f 100644 --- a/drivers/target/iscsi/iscsi_target_util.c +++ b/drivers/target/iscsi/iscsi_target_util.c @@ -832,9 +832,6 @@ struct iscsi_conn *iscsit_get_conn_from_cid_rcfr(struct iscsi_session *sess, u16 list_for_each_entry(conn, &sess->sess_conn_list, conn_list) { if (conn->cid == cid) { iscsit_inc_conn_usage_count(conn); - spin_lock(&conn->state_lock); - atomic_set(&conn->connection_wait_rcfr, 1); - spin_unlock(&conn->state_lock); spin_unlock_bh(&sess->conn_lock); return conn; } diff --git a/include/target/iscsi/iscsi_target_core.h b/include/target/iscsi/iscsi_target_core.h index 1eccb2ac7d02..aeb8932507c2 100644 --- a/include/target/iscsi/iscsi_target_core.h +++ b/include/target/iscsi/iscsi_target_core.h @@ -542,12 +542,8 @@ struct iscsi_conn { atomic_t connection_exit; atomic_t connection_recovery; atomic_t connection_reinstatement; - atomic_t connection_wait_rcfr; - atomic_t sleep_on_conn_wait_comp; atomic_t transport_failed; - struct completion conn_post_wait_comp; struct completion conn_wait_comp; - struct completion conn_wait_rcfr_comp; struct completion conn_waiting_on_uc_comp; struct completion conn_logout_comp; struct completion tx_half_close_comp; -- 2.27.0