]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
scsi: target: Add WRITE_ATOMIC_16 support to RSOC
authorMike Christie <michael.christie@oracle.com>
Mon, 20 Oct 2025 10:38:19 +0000 (10:38 +0000)
committerMartin K. Petersen <martin.petersen@oracle.com>
Mon, 3 Nov 2025 02:40:02 +0000 (21:40 -0500)
Report if the device supports WRITE_ATOMIC_16 in the
REPORT_SUPPORTED_OPERATION_CODES command.

Signed-off-by: Mike Christie <michael.christie@oracle.com>
Signed-off-by: John Garry <john.g.garry@oracle.com>
Link: https://patch.msgid.link/20251020103820.2917593-7-john.g.garry@oracle.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/target/target_core_spc.c

index ddf8104645d1e203d79c0f11bf7d22359934e1a0..fe2b888bcb435879d462b75c77faa69d66bd2960 100644 (file)
@@ -1470,6 +1470,24 @@ static const struct target_opcode_descriptor tcm_opcode_write_same32 = {
        .update_usage_bits = set_dpofua_usage_bits32,
 };
 
+static bool tcm_is_atomic_enabled(const struct target_opcode_descriptor *descr,
+                                 struct se_cmd *cmd)
+{
+       return cmd->se_dev->dev_attrib.atomic_max_len;
+}
+
+static struct target_opcode_descriptor tcm_opcode_write_atomic16 = {
+       .support = SCSI_SUPPORT_FULL,
+       .opcode = WRITE_ATOMIC_16,
+       .cdb_size = 16,
+       .usage_bits = {WRITE_ATOMIC_16, 0xf8, 0xff, 0xff,
+                      0xff, 0xff, 0xff, 0xff,
+                      0xff, 0xff, 0xff, 0xff,
+                      0xff, 0xff, SCSI_GROUP_NUMBER_MASK, SCSI_CONTROL_MASK},
+       .enabled = tcm_is_atomic_enabled,
+       .update_usage_bits = set_dpofua_usage_bits,
+};
+
 static bool tcm_is_caw_enabled(const struct target_opcode_descriptor *descr,
                               struct se_cmd *cmd)
 {
@@ -2026,6 +2044,7 @@ static const struct target_opcode_descriptor *tcm_supported_opcodes[] = {
        &tcm_opcode_write16,
        &tcm_opcode_write_verify16,
        &tcm_opcode_write_same32,
+       &tcm_opcode_write_atomic16,
        &tcm_opcode_compare_write,
        &tcm_opcode_read_capacity,
        &tcm_opcode_read_capacity16,