diff options
author | Keith Busch <kbusch@kernel.org> | 2022-03-03 23:13:11 +0300 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2022-03-07 22:48:35 +0300 |
commit | a7d4383f17e10f338ea757a849f02298790d24fb (patch) | |
tree | 30dfec8a4abe63830566ea19c2b320b4c7fc9bbb /include/linux/t10-pi.h | |
parent | f3813f4b287e480b1fcd62ca798d8556644b8278 (diff) | |
download | linux-a7d4383f17e10f338ea757a849f02298790d24fb.tar.xz |
block: add pi for extended integrity
The NVMe specification defines new data integrity formats beyond the
t10 tuple. Add support for the specification defined CRC64 formats,
assuming the reference tag does not need to be split with the "storage
tag".
Cc: Hannes Reinecke <hare@suse.de>
Cc: "Martin K. Petersen" <martin.petersen@oracle.com>
Signed-off-by: Keith Busch <kbusch@kernel.org>
Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
Link: https://lore.kernel.org/r/20220303201312.3255347-8-kbusch@kernel.org
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'include/linux/t10-pi.h')
-rw-r--r-- | include/linux/t10-pi.h | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/include/linux/t10-pi.h b/include/linux/t10-pi.h index c635c2e014e3..a4b1af581f69 100644 --- a/include/linux/t10-pi.h +++ b/include/linux/t10-pi.h @@ -53,4 +53,24 @@ extern const struct blk_integrity_profile t10_pi_type1_ip; extern const struct blk_integrity_profile t10_pi_type3_crc; extern const struct blk_integrity_profile t10_pi_type3_ip; +struct crc64_pi_tuple { + __be64 guard_tag; + __be16 app_tag; + __u8 ref_tag[6]; +}; + +static inline u64 ext_pi_ref_tag(struct request *rq) +{ + unsigned int shift = ilog2(queue_logical_block_size(rq->q)); + +#ifdef CONFIG_BLK_DEV_INTEGRITY + if (rq->q->integrity.interval_exp) + shift = rq->q->integrity.interval_exp; +#endif + return lower_48_bits(blk_rq_pos(rq) >> (shift - SECTOR_SHIFT)); +} + +extern const struct blk_integrity_profile ext_pi_type1_crc64; +extern const struct blk_integrity_profile ext_pi_type3_crc64; + #endif |