scsi: add support for user-meta interface
authorAnuj Gupta <anuj20.g@samsung.com>
Thu, 28 Nov 2024 11:22:39 +0000 (16:52 +0530)
committerJens Axboe <axboe@kernel.dk>
Mon, 23 Dec 2024 15:17:17 +0000 (08:17 -0700)
Add support for sending user-meta buffer. Set tags to be checked
using flags specified by user/block-layer.
With this change, BIP_CTRL_NOCHECK becomes unused. Remove it.

Signed-off-by: Anuj Gupta <anuj20.g@samsung.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20241128112240.8867-10-anuj20.g@samsung.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/scsi/sd.c
include/linux/bio-integrity.h

index 8947dab132d789005c9f5e9a3c11d59350890de8..cb7ac8736b91d35eeb0c8479cbb1366c40c7d111 100644 (file)
@@ -814,14 +814,14 @@ static unsigned char sd_setup_protect_cmnd(struct scsi_cmnd *scmd,
                if (bio_integrity_flagged(bio, BIP_IP_CHECKSUM))
                        scmd->prot_flags |= SCSI_PROT_IP_CHECKSUM;
 
-               if (bio_integrity_flagged(bio, BIP_CTRL_NOCHECK) == false)
+               if (bio_integrity_flagged(bio, BIP_CHECK_GUARD))
                        scmd->prot_flags |= SCSI_PROT_GUARD_CHECK;
        }
 
        if (dif != T10_PI_TYPE3_PROTECTION) {   /* DIX/DIF Type 0, 1, 2 */
                scmd->prot_flags |= SCSI_PROT_REF_INCREMENT;
 
-               if (bio_integrity_flagged(bio, BIP_CTRL_NOCHECK) == false)
+               if (bio_integrity_flagged(bio, BIP_CHECK_REFTAG))
                        scmd->prot_flags |= SCSI_PROT_REF_CHECK;
        }
 
index fe2bfe122db2bcd2aeb43d5efc711433037c71bc..2195bc06dcde86ec19d9e666c68ae629e02138b4 100644 (file)
@@ -7,13 +7,12 @@
 enum bip_flags {
        BIP_BLOCK_INTEGRITY     = 1 << 0, /* block layer owns integrity data */
        BIP_MAPPED_INTEGRITY    = 1 << 1, /* ref tag has been remapped */
-       BIP_CTRL_NOCHECK        = 1 << 2, /* disable HBA integrity checking */
-       BIP_DISK_NOCHECK        = 1 << 3, /* disable disk integrity checking */
-       BIP_IP_CHECKSUM         = 1 << 4, /* IP checksum */
-       BIP_COPY_USER           = 1 << 5, /* Kernel bounce buffer in use */
-       BIP_CHECK_GUARD         = 1 << 6, /* guard check */
-       BIP_CHECK_REFTAG        = 1 << 7, /* reftag check */
-       BIP_CHECK_APPTAG        = 1 << 8, /* apptag check */
+       BIP_DISK_NOCHECK        = 1 << 2, /* disable disk integrity checking */
+       BIP_IP_CHECKSUM         = 1 << 3, /* IP checksum */
+       BIP_COPY_USER           = 1 << 4, /* Kernel bounce buffer in use */
+       BIP_CHECK_GUARD         = 1 << 5, /* guard check */
+       BIP_CHECK_REFTAG        = 1 << 6, /* reftag check */
+       BIP_CHECK_APPTAG        = 1 << 7, /* apptag check */
 };
 
 struct bio_integrity_payload {
@@ -33,8 +32,7 @@ struct bio_integrity_payload {
        struct bio_vec          bip_inline_vecs[];/* embedded bvec array */
 };
 
-#define BIP_CLONE_FLAGS (BIP_MAPPED_INTEGRITY | BIP_CTRL_NOCHECK | \
-                        BIP_DISK_NOCHECK | BIP_IP_CHECKSUM | \
+#define BIP_CLONE_FLAGS (BIP_MAPPED_INTEGRITY | BIP_IP_CHECKSUM | \
                         BIP_CHECK_GUARD | BIP_CHECK_REFTAG | BIP_CHECK_APPTAG)
 
 #ifdef CONFIG_BLK_DEV_INTEGRITY