Commit 18623503 authored by Anuj Gupta's avatar Anuj Gupta Committed by Jens Axboe
Browse files

scsi: add support for user-meta interface



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: default avatarAnuj Gupta <anuj20.g@samsung.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20241128112240.8867-10-anuj20.g@samsung.com


Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 472292cd
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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;
	}

+7 −9
Original line number Diff line number Diff line
@@ -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