Lines Matching refs:bip

26 				 struct bio_integrity_payload *bip)
29 if (bip->bip_vec)
30 bvec_free(&bs->bvec_integrity_pool, bip->bip_vec,
31 bip->bip_max_vcnt);
32 mempool_free(bip, &bs->bio_integrity_pool);
34 kfree(bip);
52 struct bio_integrity_payload *bip;
60 bip = kmalloc(struct_size(bip, bip_inline_vecs, nr_vecs), gfp_mask);
63 bip = mempool_alloc(&bs->bio_integrity_pool, gfp_mask);
67 if (unlikely(!bip))
70 memset(bip, 0, sizeof(*bip));
73 bip->bip_max_vcnt = nr_vecs;
75 bip->bip_vec = bvec_alloc(&bs->bvec_integrity_pool,
76 &bip->bip_max_vcnt, gfp_mask);
77 if (!bip->bip_vec)
80 bip->bip_vec = bip->bip_inline_vecs;
83 bip->bip_bio = bio;
84 bio->bi_integrity = bip;
87 return bip;
89 __bio_integrity_free(bs, bip);
106 static void bio_integrity_uncopy_user(struct bio_integrity_payload *bip)
108 unsigned short nr_vecs = bip->bip_max_vcnt - 1;
109 struct bio_vec *copy = &bip->bip_vec[1];
110 size_t bytes = bip->bip_iter.bi_size;
115 ret = copy_to_iter(bvec_virt(bip->bip_vec), bytes, &iter);
121 static void bio_integrity_unmap_user(struct bio_integrity_payload *bip)
123 bool dirty = bio_data_dir(bip->bip_bio) == READ;
125 if (bip->bip_flags & BIP_COPY_USER) {
127 bio_integrity_uncopy_user(bip);
128 kfree(bvec_virt(bip->bip_vec));
132 bio_integrity_unpin_bvec(bip->bip_vec, bip->bip_max_vcnt, dirty);
137 * @bio: bio containing bip to be freed
144 struct bio_integrity_payload *bip = bio_integrity(bio);
147 if (bip->bip_flags & BIP_BLOCK_INTEGRITY)
148 kfree(bvec_virt(bip->bip_vec));
149 else if (bip->bip_flags & BIP_INTEGRITY_USER)
150 bio_integrity_unmap_user(bip);
152 __bio_integrity_free(bs, bip);
170 struct bio_integrity_payload *bip = bio_integrity(bio);
172 if (((bip->bip_iter.bi_size + len) >> SECTOR_SHIFT) >
176 if (bip->bip_vcnt > 0) {
177 struct bio_vec *bv = &bip->bip_vec[bip->bip_vcnt - 1];
182 bip->bip_iter.bi_size += len;
186 if (bip->bip_vcnt >=
187 min(bip->bip_max_vcnt, queue_max_integrity_segments(q)))
198 bvec_set_page(&bip->bip_vec[bip->bip_vcnt], page, len, offset);
199 bip->bip_vcnt++;
200 bip->bip_iter.bi_size += len;
211 struct bio_integrity_payload *bip;
227 bip = bio_integrity_alloc(bio, GFP_KERNEL, 1);
235 bip = bio_integrity_alloc(bio, GFP_KERNEL, nr_vecs + 1);
238 if (IS_ERR(bip)) {
239 ret = PTR_ERR(bip);
246 memcpy(&bip->bip_vec[1], bvec, nr_vecs * sizeof(*bvec));
255 bip->bip_flags |= BIP_INTEGRITY_USER | BIP_COPY_USER;
256 bip->bip_iter.bi_sector = seed;
268 struct bio_integrity_payload *bip;
270 bip = bio_integrity_alloc(bio, GFP_KERNEL, nr_vecs);
271 if (IS_ERR(bip))
272 return PTR_ERR(bip);
274 memcpy(bip->bip_vec, bvec, nr_vecs * sizeof(*bvec));
275 bip->bip_flags |= BIP_INTEGRITY_USER;
276 bip->bip_iter.bi_sector = seed;
277 bip->bip_iter.bi_size = len;
390 struct bio_integrity_payload *bip = bio_integrity(bio);
397 iter.prot_buf = bvec_virt(bip->bip_vec);
429 struct bio_integrity_payload *bip;
472 bip = bio_integrity_alloc(bio, GFP_NOIO, nr_pages);
473 if (IS_ERR(bip)) {
479 bip->bip_flags |= BIP_BLOCK_INTEGRITY;
480 bip_set_seed(bip, bio->bi_iter.bi_sector);
483 bip->bip_flags |= BIP_IP_CHECKSUM;
509 bip->bio_iter = bio->bi_iter;
530 struct bio_integrity_payload *bip =
532 struct bio *bio = bip->bip_bio;
540 bio->bi_status = bio_integrity_process(bio, &bip->bio_iter,
560 struct bio_integrity_payload *bip = bio_integrity(bio);
563 (bip->bip_flags & BIP_BLOCK_INTEGRITY) && bi->profile->verify_fn) {
564 INIT_WORK(&bip->bip_work, bio_integrity_verify_fn);
565 queue_work(kintegrityd_wq, &bip->bip_work);
584 struct bio_integrity_payload *bip = bio_integrity(bio);
588 bip->bip_iter.bi_sector += bio_integrity_intervals(bi, bytes_done >> 9);
589 bvec_iter_advance(bip->bip_vec, &bip->bip_iter, bytes);
600 struct bio_integrity_payload *bip = bio_integrity(bio);
603 bip->bip_iter.bi_size = bio_integrity_bytes(bi, bio_sectors(bio));
613 * Description: Called to allocate a bip when cloning a bio
619 struct bio_integrity_payload *bip;
623 bip = bio_integrity_alloc(bio, gfp_mask, bip_src->bip_vcnt);
624 if (IS_ERR(bip))
625 return PTR_ERR(bip);
627 memcpy(bip->bip_vec, bip_src->bip_vec,
630 bip->bip_vcnt = bip_src->bip_vcnt;
631 bip->bip_iter = bip_src->bip_iter;
632 bip->bip_flags = bip_src->bip_flags & ~BIP_BLOCK_INTEGRITY;