Spdk/lib/iscsi
Shuhei Matsumoto 855633a597 iscsi: Get LUN ID from task instead of Data-Out PDU to fix SCSI compliance test failure
A major SCSI compliance test expects that the LUN field is reserved
(not to be checked) in the SCSI Data-Out PDU.

In that test, the LUN field in the first SCSI Command PDU is 0 and
the LUN field in the SCSI Data-Out PDU sent in response to the R2T
is 0xFFFFFFFFFFFFFFFF. The TTT field in the SCSI Data-Out PDU is 0xF that
is copied from the R2T. 0xF is valid as TTT.

Hence spdk_iscsi_op_data() returns Check Condition because LUN is
not found.

This patch changes to get LUN ID from not the LUN field in the SCSI
Data-Out PDU but the saved task.

The following is excerpts from iSCSI specification (RFC7143). The
behavior of the SCSI compliance test looks against the specification
but changing SPDK will be safer.

11.7.4.  Target Transfer Tag and LUN

   On outgoing data, the Target Transfer Tag is provided to the target
   if the transfer is honoring an R2T.  In this case, the Target
   Transfer Tag field is a replica of the Target Transfer Tag provided
   with the R2T.

   On incoming data, the Target Transfer Tag and LUN MUST be provided by
   the target if the A bit is set to 1; otherwise, they are reserved.
   The Target Transfer Tag and LUN are copied by the initiator into the
   SNACK of type DataACK that it issues as a result of receiving a SCSI
   Data-In PDU with the A bit set to 1.

   The Target Transfer Tag values are not specified by this protocol,
   except that the value 0xffffffff is reserved and means that the
   Target Transfer Tag is not supplied.  If the Target Transfer Tag is
   provided, then the LUN field MUST hold a valid value and be
   consistent with whatever was specified with the command; otherwise,
   the LUN field is reserved.

Change-Id: I110a7e396d1e517b2a39ca5e586ab2bb2d45e5f3
Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-on: https://review.gerrithub.io/425333
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com>
2018-09-12 13:21:43 +00:00
..
acceptor.c thread: Replace #include of io_channel.h with thread.h 2018-06-12 15:24:07 +00:00
acceptor.h iscsi: login poller per portal and portal cache 2017-10-06 17:00:45 -04:00
conn.c trace: remove alias concept 2018-09-05 18:03:43 +00:00
conn.h iscsi: Support hot removal of LUN based on LUN open/close 2018-07-17 17:43:28 +00:00
init_grp.c iscsi: Add JSON config/info dump for initiator group. 2018-05-10 19:38:26 +00:00
init_grp.h iscsi: Add JSON config/info dump for initiator group. 2018-05-10 19:38:26 +00:00
iscsi_rpc.c iscsi&scripts/rpc: Add get_iscsi_auth_groups RPC to get current configuration 2018-08-29 21:40:31 +00:00
iscsi_subsystem.c iscsi: Fix the bug that mutual chap is not enabled by .ini config file 2018-09-11 21:59:44 +00:00
iscsi.c iscsi: Get LUN ID from task instead of Data-Out PDU to fix SCSI compliance test failure 2018-09-12 13:21:43 +00:00
iscsi.h iscsi, nvmf, vhost: remove default config file pathnames 2018-09-05 19:46:17 +00:00
Makefile build: remove $(ENV_CFLAGS) where not necessary 2018-01-03 12:05:59 -05:00
md5.c astyle: enforce braces around single-line statements 2017-12-11 11:19:32 -05:00
md5.h include: Move the remainder of the code base to stdinc.h 2017-05-08 13:20:36 -07:00
param.c lib: fix typos in the lib directory 2018-08-24 17:15:12 +00:00
param.h include: Move the remainder of the code base to stdinc.h 2017-05-08 13:20:36 -07:00
portal_grp.c iscsi: Fix two bugs of JSON config dump 2018-05-17 23:06:11 +00:00
portal_grp.h iscsi: Add JSON config/info dump for portal group. 2018-05-10 19:38:26 +00:00
task.c scsi, iscsi: move task->parent to iSCSI task 2018-01-05 00:01:37 -05:00
task.h iscsi: fix the primary iscsi task free in queued_datain_tasks 2018-08-15 17:35:38 +00:00
tgt_node.c iscsi: Add set_iscsi_target_node_auth RPC to configure CHAP dynamically 2018-08-22 22:39:26 +00:00
tgt_node.h iscsi: Add set_iscsi_target_node_auth RPC to configure CHAP dynamically 2018-08-22 22:39:26 +00:00