From a45c7ba9db7dfe420634fcec3e16aa3f7807a0f5 Mon Sep 17 00:00:00 2001
From: Maurizio Lombardi <mlombard@redhat.com>
Date: Sat, 15 Oct 2022 17:29:27 +0200
Subject: [PATCH 2/4] target: iscsi: remove boilerplate code

Add a function that initializes the iscsi_login values from the login
request PDU and remove the duplicated code.

Signed-off-by: Maurizio Lombardi <mlombard@redhat.com>
---
 drivers/infiniband/ulp/isert/ib_isert.c     | 16 +---------------
 drivers/target/iscsi/cxgbit/cxgbit_target.c | 12 +-----------
 drivers/target/iscsi/iscsi_target_login.c   | 11 +----------
 drivers/target/iscsi/iscsi_target_util.c    | 20 ++++++++++++++++++++
 include/target/iscsi/iscsi_transport.h      |  3 +++
 5 files changed, 26 insertions(+), 36 deletions(-)

diff --git a/drivers/infiniband/ulp/isert/ib_isert.c b/drivers/infiniband/ulp/isert/ib_isert.c
index 9dc581dd1321..4cab5d8c378d 100644
--- a/drivers/infiniband/ulp/isert/ib_isert.c
+++ b/drivers/infiniband/ulp/isert/ib_isert.c
@@ -987,21 +987,7 @@ isert_rx_login_req(struct isert_conn *isert_conn)
 	if (login->first_request) {
 		struct iscsi_login_req *login_req =
 			(struct iscsi_login_req *)isert_get_iscsi_hdr(rx_desc);
-		/*
-		 * Setup the initial iscsi_login values from the leading
-		 * login request PDU.
-		 */
-		login->leading_connection = (!login_req->tsih) ? 1 : 0;
-		login->current_stage = ISCSI_LOGIN_CURRENT_STAGE(
-				login_req->flags);
-		login->version_min	= login_req->min_version;
-		login->version_max	= login_req->max_version;
-		memcpy(login->isid, login_req->isid, 6);
-		login->cmd_sn		= be32_to_cpu(login_req->cmdsn);
-		login->init_task_tag	= login_req->itt;
-		login->initial_exp_statsn = be32_to_cpu(login_req->exp_statsn);
-		login->cid		= be16_to_cpu(login_req->cid);
-		login->tsih		= be16_to_cpu(login_req->tsih);
+		iscsit_setup_login_from_req_pdu(login, login_req);
 	}
 
 	memcpy(&login->req[0], isert_get_iscsi_hdr(rx_desc), ISCSI_HDR_LEN);
diff --git a/drivers/target/iscsi/cxgbit/cxgbit_target.c b/drivers/target/iscsi/cxgbit/cxgbit_target.c
index acfc39683c87..640dce3d882b 100644
--- a/drivers/target/iscsi/cxgbit/cxgbit_target.c
+++ b/drivers/target/iscsi/cxgbit/cxgbit_target.c
@@ -1339,17 +1339,7 @@ static int cxgbit_rx_login_pdu(struct cxgbit_sock *csk)
 	 */
 	if (login->first_request) {
 		login_req = (struct iscsi_login_req *)login->req;
-		login->leading_connection = (!login_req->tsih) ? 1 : 0;
-		login->current_stage	= ISCSI_LOGIN_CURRENT_STAGE(
-				login_req->flags);
-		login->version_min	= login_req->min_version;
-		login->version_max	= login_req->max_version;
-		memcpy(login->isid, login_req->isid, 6);
-		login->cmd_sn		= be32_to_cpu(login_req->cmdsn);
-		login->init_task_tag	= login_req->itt;
-		login->initial_exp_statsn = be32_to_cpu(login_req->exp_statsn);
-		login->cid		= be16_to_cpu(login_req->cid);
-		login->tsih		= be16_to_cpu(login_req->tsih);
+		iscsit_setup_login_from_req_pdu(login, login_req);
 	}
 
 	if (iscsi_target_check_login_request(conn, login) < 0)
diff --git a/drivers/target/iscsi/iscsi_target_login.c b/drivers/target/iscsi/iscsi_target_login.c
index 27e448c2d066..56b87964dcad 100644
--- a/drivers/target/iscsi/iscsi_target_login.c
+++ b/drivers/target/iscsi/iscsi_target_login.c
@@ -1040,16 +1040,7 @@ int iscsit_get_login_rx(struct iscsit_conn *conn, struct iscsi_login *login)
 	 */
 	if (login->first_request) {
 		login_req = (struct iscsi_login_req *)login->req;
-		login->leading_connection = (!login_req->tsih) ? 1 : 0;
-		login->current_stage	= ISCSI_LOGIN_CURRENT_STAGE(login_req->flags);
-		login->version_min	= login_req->min_version;
-		login->version_max	= login_req->max_version;
-		memcpy(login->isid, login_req->isid, 6);
-		login->cmd_sn		= be32_to_cpu(login_req->cmdsn);
-		login->init_task_tag	= login_req->itt;
-		login->initial_exp_statsn = be32_to_cpu(login_req->exp_statsn);
-		login->cid		= be16_to_cpu(login_req->cid);
-		login->tsih		= be16_to_cpu(login_req->tsih);
+		iscsit_setup_login_from_req_pdu(login, login_req);
 	}
 
 	if (iscsi_target_check_login_request(conn, login) < 0)
diff --git a/drivers/target/iscsi/iscsi_target_util.c b/drivers/target/iscsi/iscsi_target_util.c
index 8d9f21372b67..217966f9096a 100644
--- a/drivers/target/iscsi/iscsi_target_util.c
+++ b/drivers/target/iscsi/iscsi_target_util.c
@@ -1334,6 +1334,26 @@ void iscsit_collect_login_stats(
 	spin_unlock(&ls->lock);
 }
 
+void iscsit_setup_login_from_req_pdu(struct iscsi_login *login,
+				     struct iscsi_login_req *login_req)
+{
+	/*
+	 * Setup the initial iscsi_login values from the leading
+	 * login request PDU.
+	 */
+	login->leading_connection = (!login_req->tsih) ? 1 : 0;
+	login->current_stage	= ISCSI_LOGIN_CURRENT_STAGE(login_req->flags);
+	login->version_min	= login_req->min_version;
+	login->version_max	= login_req->max_version;
+	memcpy(login->isid, login_req->isid, 6);
+	login->cmd_sn		= be32_to_cpu(login_req->cmdsn);
+	login->init_task_tag	= login_req->itt;
+	login->initial_exp_statsn = be32_to_cpu(login_req->exp_statsn);
+	login->cid		= be16_to_cpu(login_req->cid);
+	login->tsih		= be16_to_cpu(login_req->tsih);
+}
+EXPORT_SYMBOL(iscsit_setup_login_from_req_pdu);
+
 struct iscsi_tiqn *iscsit_snmp_get_tiqn(struct iscsit_conn *conn)
 {
 	struct iscsi_portal_group *tpg;
diff --git a/include/target/iscsi/iscsi_transport.h b/include/target/iscsi/iscsi_transport.h
index 42cfe02ea909..c78f11d1794f 100644
--- a/include/target/iscsi/iscsi_transport.h
+++ b/include/target/iscsi/iscsi_transport.h
@@ -134,6 +134,9 @@ extern struct iscsit_cmd *
 iscsit_find_cmd_from_itt_or_dump(struct iscsit_conn *conn,
 				 itt_t init_task_tag, u32 length);
 
+extern void iscsit_setup_login_from_req_pdu(struct iscsi_login *login,
+					    struct iscsi_login_req *login_req);
+
 /*
  * From iscsi_target_nego.c
  */
-- 
2.31.1