]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
scsi: mpt3sas: Use the proper SCSI midlayer interfaces for PI
authorMartin K. Petersen <martin.petersen@oracle.com>
Tue, 17 Aug 2021 02:50:13 +0000 (22:50 -0400)
committerMartin K. Petersen <martin.petersen@oracle.com>
Wed, 25 Aug 2021 03:10:14 +0000 (23:10 -0400)
Use the SCSI midlayer interfaces to query protection interval, reference
tag, and per-command DIX flags.

Link: https://lore.kernel.org/r/20210817025014.12085-2-martin.petersen@oracle.com
Cc: Sreekanth Reddy <sreekanth.reddy@broadcom.com>
Cc: Kashyap Desai <kashyap.desai@broadcom.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/mpt3sas/mpt3sas_scsih.c

index cbc7b3d9d913f16fd338d412392708b2ff8d4678..2f82b1e629af14293f02e43392f560242eaf9936 100644 (file)
@@ -5048,48 +5048,31 @@ _scsih_setup_eedp(struct MPT3SAS_ADAPTER *ioc, struct scsi_cmnd *scmd,
        Mpi25SCSIIORequest_t *mpi_request)
 {
        u16 eedp_flags;
-       unsigned char prot_op = scsi_get_prot_op(scmd);
-       unsigned char prot_type = scsi_get_prot_type(scmd);
        Mpi25SCSIIORequest_t *mpi_request_3v =
           (Mpi25SCSIIORequest_t *)mpi_request;
 
-       if (prot_type == SCSI_PROT_DIF_TYPE0 || prot_op == SCSI_PROT_NORMAL)
-               return;
-
-       if (prot_op ==  SCSI_PROT_READ_STRIP)
+       switch (scsi_get_prot_op(scmd)) {
+       case SCSI_PROT_READ_STRIP:
                eedp_flags = MPI2_SCSIIO_EEDPFLAGS_CHECK_REMOVE_OP;
-       else if (prot_op ==  SCSI_PROT_WRITE_INSERT)
+               break;
+       case SCSI_PROT_WRITE_INSERT:
                eedp_flags = MPI2_SCSIIO_EEDPFLAGS_INSERT_OP;
-       else
+               break;
+       default:
                return;
+       }
 
-       switch (prot_type) {
-       case SCSI_PROT_DIF_TYPE1:
-       case SCSI_PROT_DIF_TYPE2:
+       if (scmd->prot_flags & SCSI_PROT_GUARD_CHECK)
+               eedp_flags |= MPI2_SCSIIO_EEDPFLAGS_CHECK_GUARD;
 
-               /*
-               * enable ref/guard checking
-               * auto increment ref tag
-               */
+       if (scmd->prot_flags & SCSI_PROT_REF_CHECK) {
                eedp_flags |= MPI2_SCSIIO_EEDPFLAGS_INC_PRI_REFTAG |
-                   MPI2_SCSIIO_EEDPFLAGS_CHECK_REFTAG |
-                   MPI2_SCSIIO_EEDPFLAGS_CHECK_GUARD;
+                       MPI2_SCSIIO_EEDPFLAGS_CHECK_REFTAG;
                mpi_request->CDB.EEDP32.PrimaryReferenceTag =
-                   cpu_to_be32(t10_pi_ref_tag(scsi_cmd_to_rq(scmd)));
-               break;
-
-       case SCSI_PROT_DIF_TYPE3:
-
-               /*
-               * enable guard checking
-               */
-               eedp_flags |= MPI2_SCSIIO_EEDPFLAGS_CHECK_GUARD;
-
-               break;
+                       cpu_to_be32(scsi_prot_ref_tag(scmd));
        }
 
-       mpi_request_3v->EEDPBlockSize =
-           cpu_to_le16(scmd->device->sector_size);
+       mpi_request_3v->EEDPBlockSize = cpu_to_le16(scsi_prot_interval(scmd));
 
        if (ioc->is_gen35_ioc)
                eedp_flags |= MPI25_SCSIIO_EEDPFLAGS_APPTAG_DISABLE_MODE;