lib/iscsi: Clarify only logout with reason "close the session" is acceptable on discovery session

Based on the following description in Chapter 4.3 "iSCSI Session Types in
iSCSI specification

      b) Discovery session - a session only opened for target discovery.
         The target MUST ONLY accept Text Requests with the SendTargets
         key and a Logout Request with reason "close the session".  All
         other requests MUST be rejected.

update the comment slightly, add macro constants for iSCSI logout
reason, and change the ordering of checks to be session type and then
logout reason.

Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Change-Id: Ifc2ecc5b6dde546700662d3cda59d8cc465fd83a
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/472672
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Ziye Yang <ziye.yang@intel.com>
This commit is contained in:
Shuhei Matsumoto 2019-10-29 07:24:28 +09:00 committed by Tomasz Zawadzki
parent 9c3c488e0c
commit bb61fabf26
2 changed files with 10 additions and 2 deletions

View File

@ -2484,8 +2484,11 @@ iscsi_pdu_hdr_op_logout(struct spdk_iscsi_conn *conn, struct spdk_iscsi_pdu *pdu
reqh->reason, task_tag, cid);
if (conn->sess != NULL) {
if (reqh->reason != 0 && conn->sess->session_type == SESSION_TYPE_DISCOVERY) {
SPDK_ERRLOG("only logout with close the session reason can be in discovery session\n");
if (conn->sess->session_type == SESSION_TYPE_DISCOVERY &&
reqh->reason != ISCSI_LOGOUT_REASON_CLOSE_SESSION) {
SPDK_ERRLOG("Target can accept logout only with reason \"close the session\" "
"on discovery session. %d is not acceptable reason.\n",
reqh->reason);
return SPDK_ISCSI_CONNECTION_FATAL;
}

View File

@ -358,6 +358,11 @@ struct spdk_iscsi_globals {
#define ISCSI_NSG_RESERVED_CODE 2
#define ISCSI_FULL_FEATURE_PHASE 3
/* logout reason */
#define ISCSI_LOGOUT_REASON_CLOSE_SESSION 0
#define ISCSI_LOGOUT_REASON_CLOSE_CONNECTION 1
#define ISCSI_LOGOUT_REASON_REMOVE_CONN_FOR_RECOVERY 2
enum spdk_error_codes {
SPDK_ISCSI_CONNECTION_FATAL = -1,
SPDK_PDU_FATAL = -2,