Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 13 additions & 12 deletions include/linux/t10-pi.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

#include <linux/types.h>
#include <linux/blk-mq.h>
#include <linux/wordpart.h>

/*
* A T10 PI-capable target device can be formatted with different
Expand All @@ -25,6 +26,16 @@ enum t10_dif_type {
T10_PI_TYPE3_PROTECTION = 0x3,
};

static inline u64 full_pi_ref_tag(const struct request *rq)
{
unsigned int shift = ilog2(queue_logical_block_size(rq->q));

if (IS_ENABLED(CONFIG_BLK_DEV_INTEGRITY) &&
rq->q->limits.integrity.interval_exp)
shift = rq->q->limits.integrity.interval_exp;
return blk_rq_pos(rq) >> (shift - SECTOR_SHIFT);
}

/*
* T10 Protection Information tuple.
*/
Expand All @@ -39,12 +50,7 @@ struct t10_pi_tuple {

static inline u32 t10_pi_ref_tag(struct request *rq)
{
unsigned int shift = ilog2(queue_logical_block_size(rq->q));

if (IS_ENABLED(CONFIG_BLK_DEV_INTEGRITY) &&
rq->q->limits.integrity.interval_exp)
shift = rq->q->limits.integrity.interval_exp;
return blk_rq_pos(rq) >> (shift - SECTOR_SHIFT) & 0xffffffff;
return lower_32_bits(full_pi_ref_tag(rq));
}

struct crc64_pi_tuple {
Expand All @@ -64,12 +70,7 @@ static inline u64 lower_48_bits(u64 n)

static inline u64 ext_pi_ref_tag(struct request *rq)
{
unsigned int shift = ilog2(queue_logical_block_size(rq->q));

if (IS_ENABLED(CONFIG_BLK_DEV_INTEGRITY) &&
rq->q->limits.integrity.interval_exp)
shift = rq->q->limits.integrity.interval_exp;
return lower_48_bits(blk_rq_pos(rq) >> (shift - SECTOR_SHIFT));
return lower_48_bits(full_pi_ref_tag(rq));
}

#endif