scsi: target: Return COMPARE AND WRITE miscompare offsets
authorDavid Disseldorp <ddiss@suse.de>
Sat, 31 Oct 2020 23:32:11 +0000 (00:32 +0100)
committerMartin K. Petersen <martin.petersen@oracle.com>
Thu, 5 Nov 2020 03:02:43 +0000 (22:02 -0500)
commit749c226cf56ed47ae76c57b2f7f6b8f01b5797c4
tree952b67b3e66841c2b2596c0b452ea782606d998a
parentab628b9fc8c231655e52ed2b4a50758a633a2c63
scsi: target: Return COMPARE AND WRITE miscompare offsets

SBC-4 r15 5.3 COMPARE AND WRITE command states:
  if the compare operation does not indicate a match, then terminate the
  command with CHECK CONDITION status with the sense key set to
  MISCOMPARE and the additional sense code set to MISCOMPARE DURING
  VERIFY OPERATION. In the sense data (see 4.18 and SPC-5) the offset
  from the start of the Data-Out Buffer to the first byte of data that
  was not equal shall be reported in the INFORMATION field.

This change implements the missing logic to report the miscompare offset in
the sense data INFORMATION field. As an optimization, byte-by-byte
miscompare offset calculation is only performed after memcmp() mismatch.

Link: https://lore.kernel.org/r/20201031233211.5207-5-ddiss@suse.de
Signed-off-by: David Disseldorp <ddiss@suse.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/target/target_core_sbc.c
drivers/target/target_core_transport.c