Lines Matching refs:bio

13 #include <linux/bio.h>
76 static void copy_to_high_bio_irq(struct bio *to, struct bio *from)
81 * The bio of @from is created by bounce, so we can iterate
102 static void bounce_end_io(struct bio *bio)
104 struct bio *bio_orig = bio->bi_private;
112 bio_for_each_segment_all(bvec, bio, iter_all) {
121 bio_orig->bi_status = bio->bi_status;
123 bio_put(bio);
126 static void bounce_end_io_write(struct bio *bio)
128 bounce_end_io(bio);
131 static void bounce_end_io_read(struct bio *bio)
133 struct bio *bio_orig = bio->bi_private;
135 if (!bio->bi_status)
136 copy_to_high_bio_irq(bio_orig, bio);
138 bounce_end_io(bio);
141 static struct bio *bounce_clone_bio(struct bio *bio_src)
145 struct bio *bio;
149 * bio_src->bi_io_vec to bio->bi_io_vec.
153 * - The point of cloning the biovec is to produce a bio with a biovec
156 * - The original bio could've had more than BIO_MAX_VECS biovecs; if
162 * that does not own the bio - reason being drivers don't use it for
167 bio = bio_alloc_bioset(bio_src->bi_bdev, bio_segments(bio_src),
170 bio_set_flag(bio, BIO_REMAPPED);
171 bio->bi_ioprio = bio_src->bi_ioprio;
172 bio->bi_iter.bi_sector = bio_src->bi_iter.bi_sector;
173 bio->bi_iter.bi_size = bio_src->bi_iter.bi_size;
175 switch (bio_op(bio)) {
182 bio->bi_io_vec[bio->bi_vcnt++] = bv;
186 if (bio_crypt_clone(bio, bio_src, GFP_NOIO) < 0)
190 bio_integrity_clone(bio, bio_src, GFP_NOIO) < 0)
193 bio_clone_blkg_association(bio, bio_src);
195 return bio;
198 bio_put(bio);
202 struct bio *__blk_queue_bounce(struct bio *bio_orig, struct request_queue *q)
204 struct bio *bio;
223 * the split size so that each bio is properly block size aligned,
229 bio = bio_split(bio_orig, sectors, GFP_NOIO, &bounce_bio_split);
230 bio_chain(bio, bio_orig);
232 bio_orig = bio;
234 bio = bounce_clone_bio(bio_orig);
239 * because the 'bio' is single-page bvec.
241 for (i = 0, to = bio->bi_io_vec; i < bio->bi_vcnt; to++, i++) {
259 bio->bi_flags |= (1 << BIO_BOUNCED);
262 bio->bi_end_io = bounce_end_io_read;
264 bio->bi_end_io = bounce_end_io_write;
266 bio->bi_private = bio_orig;
267 return bio;