File Index
Files and directories
Sign in
FILE

bio-integrity.h

File preview with syntax highlighting.

linux-6.19.14/include/linux/bio-integrity.h C
  1/* SPDX-License-Identifier: GPL-2.0 */
  2#ifndef _LINUX_BIO_INTEGRITY_H
  3#define _LINUX_BIO_INTEGRITY_H
  4
  5#include <linux/bio.h>
  6
  7enum bip_flags {
  8	BIP_BLOCK_INTEGRITY	= 1 << 0, /* block layer owns integrity data */
  9	BIP_MAPPED_INTEGRITY	= 1 << 1, /* ref tag has been remapped */
 10	BIP_DISK_NOCHECK	= 1 << 2, /* disable disk integrity checking */
 11	BIP_IP_CHECKSUM		= 1 << 3, /* IP checksum */
 12	BIP_COPY_USER		= 1 << 4, /* Kernel bounce buffer in use */
 13	BIP_CHECK_GUARD		= 1 << 5, /* guard check */
 14	BIP_CHECK_REFTAG	= 1 << 6, /* reftag check */
 15	BIP_CHECK_APPTAG	= 1 << 7, /* apptag check */
 16
 17	BIP_MEMPOOL		= 1 << 15, /* buffer backed by mempool */
 18};
 19
 20struct bio_integrity_payload {
 21	struct bvec_iter	bip_iter;
 22
 23	unsigned short		bip_vcnt;	/* # of integrity bio_vecs */
 24	unsigned short		bip_max_vcnt;	/* integrity bio_vec slots */
 25	unsigned short		bip_flags;	/* control flags */
 26	u16			app_tag;	/* application tag value */
 27
 28	struct bio_vec		*bip_vec;
 29};
 30
 31#define BIP_CLONE_FLAGS (BIP_MAPPED_INTEGRITY | BIP_IP_CHECKSUM | \
 32			 BIP_CHECK_GUARD | BIP_CHECK_REFTAG | BIP_CHECK_APPTAG)
 33
 34#ifdef CONFIG_BLK_DEV_INTEGRITY
 35
 36#define bip_for_each_vec(bvl, bip, iter)				\
 37	for_each_bvec(bvl, (bip)->bip_vec, iter, (bip)->bip_iter)
 38
 39#define bio_for_each_integrity_vec(_bvl, _bio, _iter)			\
 40	for_each_bio(_bio)						\
 41		bip_for_each_vec(_bvl, _bio->bi_integrity, _iter)
 42
 43static inline struct bio_integrity_payload *bio_integrity(struct bio *bio)
 44{
 45	if (bio->bi_opf & REQ_INTEGRITY)
 46		return bio->bi_integrity;
 47
 48	return NULL;
 49}
 50
 51static inline bool bio_integrity_flagged(struct bio *bio, enum bip_flags flag)
 52{
 53	struct bio_integrity_payload *bip = bio_integrity(bio);
 54
 55	if (bip)
 56		return bip->bip_flags & flag;
 57
 58	return false;
 59}
 60
 61static inline sector_t bip_get_seed(struct bio_integrity_payload *bip)
 62{
 63	return bip->bip_iter.bi_sector;
 64}
 65
 66static inline void bip_set_seed(struct bio_integrity_payload *bip,
 67				sector_t seed)
 68{
 69	bip->bip_iter.bi_sector = seed;
 70}
 71
 72void bio_integrity_init(struct bio *bio, struct bio_integrity_payload *bip,
 73		struct bio_vec *bvecs, unsigned int nr_vecs);
 74struct bio_integrity_payload *bio_integrity_alloc(struct bio *bio, gfp_t gfp,
 75		unsigned int nr);
 76int bio_integrity_add_page(struct bio *bio, struct page *page, unsigned int len,
 77		unsigned int offset);
 78int bio_integrity_map_user(struct bio *bio, struct iov_iter *iter);
 79int bio_integrity_map_iter(struct bio *bio, struct uio_meta *meta);
 80void bio_integrity_unmap_user(struct bio *bio);
 81bool bio_integrity_prep(struct bio *bio);
 82void bio_integrity_advance(struct bio *bio, unsigned int bytes_done);
 83void bio_integrity_trim(struct bio *bio);
 84int bio_integrity_clone(struct bio *bio, struct bio *bio_src, gfp_t gfp_mask);
 85
 86#else /* CONFIG_BLK_DEV_INTEGRITY */
 87
 88static inline struct bio_integrity_payload *bio_integrity(struct bio *bio)
 89{
 90	return NULL;
 91}
 92
 93static inline int bio_integrity_map_user(struct bio *bio, struct iov_iter *iter)
 94{
 95	return -EINVAL;
 96}
 97
 98static inline int bio_integrity_map_iter(struct bio *bio, struct uio_meta *meta)
 99{
100	return -EINVAL;
101}
102
103static inline void bio_integrity_unmap_user(struct bio *bio)
104{
105}
106
107static inline bool bio_integrity_prep(struct bio *bio)
108{
109	return true;
110}
111
112static inline int bio_integrity_clone(struct bio *bio, struct bio *bio_src,
113		gfp_t gfp_mask)
114{
115	return 0;
116}
117
118static inline void bio_integrity_advance(struct bio *bio,
119		unsigned int bytes_done)
120{
121}
122
123static inline void bio_integrity_trim(struct bio *bio)
124{
125}
126
127static inline bool bio_integrity_flagged(struct bio *bio, enum bip_flags flag)
128{
129	return false;
130}
131
132static inline struct bio_integrity_payload *
133bio_integrity_alloc(struct bio *bio, gfp_t gfp, unsigned int nr)
134{
135	return ERR_PTR(-EINVAL);
136}
137
138static inline int bio_integrity_add_page(struct bio *bio, struct page *page,
139					unsigned int len, unsigned int offset)
140{
141	return 0;
142}
143#endif /* CONFIG_BLK_DEV_INTEGRITY */
144
145void bio_integrity_alloc_buf(struct bio *bio, bool zero_buffer);
146void bio_integrity_free_buf(struct bio_integrity_payload *bip);
147
148#endif /* _LINUX_BIO_INTEGRITY_H */
~/ Read-only file preview.