Commit 67236c44741e250199ccd77f1115568e68cf8848

Authored by Martin Svec
Committed by Nicholas Bellinger
1 parent 9f9ef6d3c0

target: Fix unsupported WRITE_SAME sense payload

This patch fixes a bug in target-core where unsupported WRITE_SAME ops
from a target_check_write_same_discard() failure was incorrectly
returning CHECK_CONDITION w/ TCM_INVALID_CDB_FIELD sense data.
This was causing some clients to not properly fall back, so go ahead
and use the correct TCM_UNSUPPORTED_SCSI_OPCODE sense for this case.

Reported-by: Martin Svec <martin.svec@zoner.cz>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>

Showing 1 changed file with 3 additions and 3 deletions Side-by-side Diff

drivers/target/target_core_transport.c
... ... @@ -2697,7 +2697,7 @@
2697 2697 cmd->se_cmd_flags |= SCF_SCSI_CONTROL_SG_IO_CDB;
2698 2698  
2699 2699 if (target_check_write_same_discard(&cdb[10], dev) < 0)
2700   - goto out_invalid_cdb_field;
  2700 + goto out_unsupported_cdb;
2701 2701 if (!passthrough)
2702 2702 cmd->execute_task = target_emulate_write_same;
2703 2703 break;
... ... @@ -2980,7 +2980,7 @@
2980 2980 cmd->se_cmd_flags |= SCF_SCSI_CONTROL_SG_IO_CDB;
2981 2981  
2982 2982 if (target_check_write_same_discard(&cdb[1], dev) < 0)
2983   - goto out_invalid_cdb_field;
  2983 + goto out_unsupported_cdb;
2984 2984 if (!passthrough)
2985 2985 cmd->execute_task = target_emulate_write_same;
2986 2986 break;
... ... @@ -3003,7 +3003,7 @@
3003 3003 * of byte 1 bit 3 UNMAP instead of original reserved field
3004 3004 */
3005 3005 if (target_check_write_same_discard(&cdb[1], dev) < 0)
3006   - goto out_invalid_cdb_field;
  3006 + goto out_unsupported_cdb;
3007 3007 if (!passthrough)
3008 3008 cmd->execute_task = target_emulate_write_same;
3009 3009 break;