scsi: target: core: Set residuals for 4Kn devices
authorRoman Bolshakov <r.bolshakov@yadro.com>
Thu, 3 Dec 2020 08:20:33 +0000 (11:20 +0300)
committerMartin K. Petersen <martin.petersen@oracle.com>
Wed, 27 Jan 2021 04:12:18 +0000 (23:12 -0500)
TCM always fails SBC commands with residuals for 4Kn devices when the
command is processed by sbc_parse_cdb(). That prevents residual signalling
to the transport driver because residual kind and residual amount aren't
set. It also makes residual handling different from 512-byte formatted
devices - if there are residuals 512-byte LUN would proceed with command
execution while 4K-byte LUN would fail.

Link: https://lore.kernel.org/r/20201203082035.54566-2-a.kovaleva@yadro.com
Based-on: https://patchwork.kernel.org/project/target-devel/patch/20170523234854.21452-31-bart.vanassche@sandisk.com/
Based-on-patch-by: Bart Van Assche <bvanassche@acm.org>
Signed-off-by: Roman Bolshakov <r.bolshakov@yadro.com>
Signed-off-by: Konstantin Vinogradov <k.vinogradov@yadro.com>
Signed-off-by: Anastasia Kovaleva <a.kovaleva@yadro.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/target/target_core_transport.c

index d47bfd8..b58966d 100644 (file)
@@ -1333,17 +1333,6 @@ target_cmd_size_check(struct se_cmd *cmd, unsigned int size)
                        }
                }
                /*
-                * Reject READ_* or WRITE_* with overflow/underflow for
-                * type SCF_SCSI_DATA_CDB.
-                */
-               if (dev->dev_attrib.block_size != 512)  {
-                       pr_err("Failing OVERFLOW/UNDERFLOW for LBA op"
-                               " CDB on non 512-byte sector setup subsystem"
-                               " plugin: %s\n", dev->transport->name);
-                       /* Returns CHECK_CONDITION + INVALID_CDB_FIELD */
-                       return TCM_INVALID_CDB_FIELD;
-               }
-               /*
                 * For the overflow case keep the existing fabric provided
                 * ->data_length.  Otherwise for the underflow case, reset
                 * ->data_length to the smaller SCSI expected data transfer