Lines Matching refs:bio
48 struct bio_integrity_payload *bio_integrity_alloc(struct bio *bio, in bio_integrity_alloc() argument
53 struct bio_set *bs = bio->bi_pool; in bio_integrity_alloc()
56 if (WARN_ON_ONCE(bio_has_crypt_ctx(bio))) in bio_integrity_alloc()
83 bip->bip_bio = bio; in bio_integrity_alloc()
84 bio->bi_integrity = bip; in bio_integrity_alloc()
85 bio->bi_opf |= REQ_INTEGRITY; in bio_integrity_alloc()
101 void bio_integrity_free(struct bio *bio) in bio_integrity_free() argument
103 struct bio_integrity_payload *bip = bio_integrity(bio); in bio_integrity_free()
104 struct bio_set *bs = bio->bi_pool; in bio_integrity_free()
110 bio->bi_integrity = NULL; in bio_integrity_free()
111 bio->bi_opf &= ~REQ_INTEGRITY; in bio_integrity_free()
123 int bio_integrity_add_page(struct bio *bio, struct page *page, in bio_integrity_add_page() argument
126 struct bio_integrity_payload *bip = bio_integrity(bio); in bio_integrity_add_page()
137 bvec_gap_to_prev(bio->bi_bdev->bd_disk->queue, in bio_integrity_add_page()
156 static blk_status_t bio_integrity_process(struct bio *bio, in bio_integrity_process() argument
159 struct blk_integrity *bi = blk_get_integrity(bio->bi_bdev->bd_disk); in bio_integrity_process()
163 struct bio_integrity_payload *bip = bio_integrity(bio); in bio_integrity_process()
166 iter.disk_name = bio->bi_bdev->bd_disk->disk_name; in bio_integrity_process()
171 __bio_for_each_segment(bv, bio, bviter, *proc_iter) { in bio_integrity_process()
198 bool bio_integrity_prep(struct bio *bio) in bio_integrity_prep() argument
201 struct blk_integrity *bi = blk_get_integrity(bio->bi_bdev->bd_disk); in bio_integrity_prep()
212 if (bio_op(bio) != REQ_OP_READ && bio_op(bio) != REQ_OP_WRITE) in bio_integrity_prep()
215 if (!bio_sectors(bio)) in bio_integrity_prep()
219 if (bio_integrity(bio)) in bio_integrity_prep()
222 if (bio_data_dir(bio) == READ) { in bio_integrity_prep()
231 intervals = bio_integrity_intervals(bi, bio_sectors(bio)); in bio_integrity_prep()
247 bip = bio_integrity_alloc(bio, GFP_NOIO, nr_pages); in bio_integrity_prep()
257 bip_set_seed(bip, bio->bi_iter.bi_sector); in bio_integrity_prep()
274 ret = bio_integrity_add_page(bio, virt_to_page(buf), in bio_integrity_prep()
292 if (bio_data_dir(bio) == WRITE) { in bio_integrity_prep()
293 bio_integrity_process(bio, &bio->bi_iter, in bio_integrity_prep()
296 bip->bio_iter = bio->bi_iter; in bio_integrity_prep()
301 bio->bi_status = status; in bio_integrity_prep()
302 bio_endio(bio); in bio_integrity_prep()
320 struct bio *bio = bip->bip_bio; in bio_integrity_verify_fn() local
321 struct blk_integrity *bi = blk_get_integrity(bio->bi_bdev->bd_disk); in bio_integrity_verify_fn()
328 bio->bi_status = bio_integrity_process(bio, &bip->bio_iter, in bio_integrity_verify_fn()
330 bio_integrity_free(bio); in bio_integrity_verify_fn()
331 bio_endio(bio); in bio_integrity_verify_fn()
345 bool __bio_integrity_endio(struct bio *bio) in __bio_integrity_endio() argument
347 struct blk_integrity *bi = blk_get_integrity(bio->bi_bdev->bd_disk); in __bio_integrity_endio()
348 struct bio_integrity_payload *bip = bio_integrity(bio); in __bio_integrity_endio()
350 if (bio_op(bio) == REQ_OP_READ && !bio->bi_status && in __bio_integrity_endio()
357 bio_integrity_free(bio); in __bio_integrity_endio()
370 void bio_integrity_advance(struct bio *bio, unsigned int bytes_done) in bio_integrity_advance() argument
372 struct bio_integrity_payload *bip = bio_integrity(bio); in bio_integrity_advance()
373 struct blk_integrity *bi = blk_get_integrity(bio->bi_bdev->bd_disk); in bio_integrity_advance()
386 void bio_integrity_trim(struct bio *bio) in bio_integrity_trim() argument
388 struct bio_integrity_payload *bip = bio_integrity(bio); in bio_integrity_trim()
389 struct blk_integrity *bi = blk_get_integrity(bio->bi_bdev->bd_disk); in bio_integrity_trim()
391 bip->bip_iter.bi_size = bio_integrity_bytes(bi, bio_sectors(bio)); in bio_integrity_trim()
403 int bio_integrity_clone(struct bio *bio, struct bio *bio_src, in bio_integrity_clone() argument
411 bip = bio_integrity_alloc(bio, gfp_mask, bip_src->bip_vcnt); in bio_integrity_clone()