include/linux/blk-integrity.h
Source file repositories/reference/linux-study-clean/include/linux/blk-integrity.h
File Facts
- System
- Linux kernel
- Corpus path
include/linux/blk-integrity.h- Extension
.h- Size
- 5695 bytes
- Lines
- 203
- Domain
- Representative Device Path
- Bucket
- PCIe NVMe Storage Path
- Inferred role
- Representative Device Path: implementation source
- Status
- source implementation candidate
Why This File Exists
Part of the selected hardware vertical slice: PCI discovery, driver binding, NVMe queues, block requests, DMA, interrupts, and completion.
- Part of the selected hardware vertical slice: PCI discovery, driver binding, NVMe queues, block requests, DMA, interrupts, and completion.
- Touches IRQ or DMA behavior; this matters for the representative real-device path.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/blk-mq.hlinux/bio-integrity.hlinux/blk-mq-dma.h
Detected Declarations
struct requestenum blk_integrity_flagsenum bio_integrity_actionfunction queue_limits_stack_integrity_bdevfunction blk_integrity_queue_supports_integrityfunction bdev_get_integrityfunction queue_max_integrity_segmentsfunction bio_integrity_intervalsfunction bio_integrity_bytesfunction blk_integrity_rqfunction rq_integrity_vecfunction blk_get_meta_capfunction blk_rq_count_integrity_sgfunction blk_rq_map_integrity_sgfunction blk_rq_integrity_map_userfunction blk_rq_integrity_dma_map_iter_startfunction blk_rq_integrity_dma_map_iter_nextfunction blk_integrity_queue_supports_integrityfunction queue_max_integrity_segmentsfunction bio_integrity_intervalsfunction bio_integrity_bytesfunction blk_integrity_rqfunction rq_integrity_vecfunction bio_integrity_action
Annotated Snippet
#ifndef _LINUX_BLK_INTEGRITY_H
#define _LINUX_BLK_INTEGRITY_H
#include <linux/blk-mq.h>
#include <linux/bio-integrity.h>
#include <linux/blk-mq-dma.h>
struct request;
enum blk_integrity_flags {
BLK_INTEGRITY_NOVERIFY = 1 << 0,
BLK_INTEGRITY_NOGENERATE = 1 << 1,
BLK_INTEGRITY_DEVICE_CAPABLE = 1 << 2,
BLK_INTEGRITY_REF_TAG = 1 << 3,
BLK_INTEGRITY_STACKED = 1 << 4,
BLK_SPLIT_INTERVAL_CAPABLE = 1 << 5,
};
const char *blk_integrity_profile_name(struct blk_integrity *bi);
bool queue_limits_stack_integrity(struct queue_limits *t,
struct queue_limits *b);
static inline bool queue_limits_stack_integrity_bdev(struct queue_limits *t,
struct block_device *bdev)
{
return queue_limits_stack_integrity(t, &bdev->bd_disk->queue->limits);
}
#ifdef CONFIG_BLK_DEV_INTEGRITY
int blk_rq_map_integrity_sg(struct request *, struct scatterlist *);
int blk_rq_count_integrity_sg(struct request_queue *, struct bio *);
int blk_rq_integrity_map_user(struct request *rq, void __user *ubuf,
ssize_t bytes);
int blk_get_meta_cap(struct block_device *bdev, unsigned int cmd,
struct logical_block_metadata_cap __user *argp);
bool blk_rq_integrity_dma_map_iter_start(struct request *req,
struct device *dma_dev, struct dma_iova_state *state,
struct blk_dma_iter *iter);
bool blk_rq_integrity_dma_map_iter_next(struct request *req,
struct device *dma_dev, struct blk_dma_iter *iter);
static inline bool
blk_integrity_queue_supports_integrity(struct request_queue *q)
{
return q->limits.integrity.metadata_size;
}
static inline struct blk_integrity *blk_get_integrity(struct gendisk *disk)
{
if (!blk_integrity_queue_supports_integrity(disk->queue))
return NULL;
return &disk->queue->limits.integrity;
}
static inline struct blk_integrity *
bdev_get_integrity(struct block_device *bdev)
{
return blk_get_integrity(bdev->bd_disk);
}
static inline unsigned short
queue_max_integrity_segments(const struct request_queue *q)
{
return q->limits.max_integrity_segments;
}
/**
* bio_integrity_intervals - Return number of integrity intervals for a bio
* @bi: blk_integrity profile for device
* @sectors: Size of the bio in 512-byte sectors
*
* Description: The block layer calculates everything in 512 byte
* sectors but integrity metadata is done in terms of the data integrity
* interval size of the storage device. Convert the block layer sectors
* to the appropriate number of integrity intervals.
*/
static inline unsigned int bio_integrity_intervals(struct blk_integrity *bi,
unsigned int sectors)
{
return sectors >> (bi->interval_exp - 9);
}
static inline unsigned int bio_integrity_bytes(struct blk_integrity *bi,
unsigned int sectors)
{
return bio_integrity_intervals(bi, sectors) * bi->metadata_size;
}
static inline bool blk_integrity_rq(const struct request *rq)
{
Annotation
- Immediate include surface: `linux/blk-mq.h`, `linux/bio-integrity.h`, `linux/blk-mq-dma.h`.
- Detected declarations: `struct request`, `enum blk_integrity_flags`, `enum bio_integrity_action`, `function queue_limits_stack_integrity_bdev`, `function blk_integrity_queue_supports_integrity`, `function bdev_get_integrity`, `function queue_max_integrity_segments`, `function bio_integrity_intervals`, `function bio_integrity_bytes`, `function blk_integrity_rq`.
- Atlas domain: Representative Device Path / PCIe NVMe Storage Path.
- Implementation status: source implementation candidate.
- IRQ or DMA behavior appears here, which is relevant to the selected PCIe/NVMe device path.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.