iser-target: Updates for login negotiation multi-plexing support
This patch updates iser-target code to support login negotiation multi-plexing. This includes only using isert_conn->conn_login_comp for the first login request PDU, pushing the subsequent processing to iscsi_conn->login_work -> iscsi_target_do_login_rx(), and turning isert_get_login_rx() into a NOP. v3 changes: - Drop unnecessary LOGIN_FLAGS_READ_ACTIVE bit set in isert_rx_login_req() Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
This commit is contained in:
@@ -869,7 +869,11 @@ isert_rx_login_req(struct iser_rx_desc *rx_desc, int rx_buflen,
|
|||||||
size, rx_buflen, MAX_KEY_VALUE_PAIRS);
|
size, rx_buflen, MAX_KEY_VALUE_PAIRS);
|
||||||
memcpy(login->req_buf, &rx_desc->data[0], size);
|
memcpy(login->req_buf, &rx_desc->data[0], size);
|
||||||
|
|
||||||
|
if (login->first_request) {
|
||||||
complete(&isert_conn->conn_login_comp);
|
complete(&isert_conn->conn_login_comp);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
schedule_delayed_work(&conn->login_work, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -2224,6 +2228,14 @@ isert_get_login_rx(struct iscsi_conn *conn, struct iscsi_login *login)
|
|||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
pr_debug("isert_get_login_rx before conn_login_comp conn: %p\n", conn);
|
pr_debug("isert_get_login_rx before conn_login_comp conn: %p\n", conn);
|
||||||
|
/*
|
||||||
|
* For login requests after the first PDU, isert_rx_login_req() will
|
||||||
|
* kick schedule_delayed_work(&conn->login_work) as the packet is
|
||||||
|
* received, which turns this callback from iscsi_target_do_login_rx()
|
||||||
|
* into a NOP.
|
||||||
|
*/
|
||||||
|
if (!login->first_request)
|
||||||
|
return 0;
|
||||||
|
|
||||||
ret = wait_for_completion_interruptible(&isert_conn->conn_login_comp);
|
ret = wait_for_completion_interruptible(&isert_conn->conn_login_comp);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
Reference in New Issue
Block a user