Lines Matching refs:bio

76 static void copy_to_high_bio_irq(struct bio *to, struct bio *from)  in copy_to_high_bio_irq()
102 static void bounce_end_io(struct bio *bio) in bounce_end_io() argument
104 struct bio *bio_orig = bio->bi_private; in bounce_end_io()
112 bio_for_each_segment_all(bvec, bio, iter_all) { in bounce_end_io()
121 bio_orig->bi_status = bio->bi_status; in bounce_end_io()
123 bio_put(bio); in bounce_end_io()
126 static void bounce_end_io_write(struct bio *bio) in bounce_end_io_write() argument
128 bounce_end_io(bio); in bounce_end_io_write()
131 static void bounce_end_io_read(struct bio *bio) in bounce_end_io_read() argument
133 struct bio *bio_orig = bio->bi_private; in bounce_end_io_read()
135 if (!bio->bi_status) in bounce_end_io_read()
136 copy_to_high_bio_irq(bio_orig, bio); in bounce_end_io_read()
138 bounce_end_io(bio); in bounce_end_io_read()
141 static struct bio *bounce_clone_bio(struct bio *bio_src) in bounce_clone_bio()
145 struct bio *bio; in bounce_clone_bio() local
168 bio = bio_alloc_bioset(GFP_NOIO, bio_segments(bio_src), in bounce_clone_bio()
170 bio->bi_bdev = bio_src->bi_bdev; in bounce_clone_bio()
172 bio_set_flag(bio, BIO_REMAPPED); in bounce_clone_bio()
173 bio->bi_opf = bio_src->bi_opf; in bounce_clone_bio()
174 bio->bi_ioprio = bio_src->bi_ioprio; in bounce_clone_bio()
175 bio->bi_write_hint = bio_src->bi_write_hint; in bounce_clone_bio()
176 bio->bi_iter.bi_sector = bio_src->bi_iter.bi_sector; in bounce_clone_bio()
177 bio->bi_iter.bi_size = bio_src->bi_iter.bi_size; in bounce_clone_bio()
179 switch (bio_op(bio)) { in bounce_clone_bio()
185 bio->bi_io_vec[bio->bi_vcnt++] = bio_src->bi_io_vec[0]; in bounce_clone_bio()
189 bio->bi_io_vec[bio->bi_vcnt++] = bv; in bounce_clone_bio()
193 if (bio_crypt_clone(bio, bio_src, GFP_NOIO) < 0) in bounce_clone_bio()
197 bio_integrity_clone(bio, bio_src, GFP_NOIO) < 0) in bounce_clone_bio()
200 bio_clone_blkg_association(bio, bio_src); in bounce_clone_bio()
201 blkcg_bio_issue_init(bio); in bounce_clone_bio()
203 return bio; in bounce_clone_bio()
206 bio_put(bio); in bounce_clone_bio()
210 void __blk_queue_bounce(struct request_queue *q, struct bio **bio_orig) in __blk_queue_bounce()
212 struct bio *bio; in __blk_queue_bounce() local
230 bio = bio_split(*bio_orig, sectors, GFP_NOIO, &bounce_bio_split); in __blk_queue_bounce()
231 bio_chain(bio, *bio_orig); in __blk_queue_bounce()
233 *bio_orig = bio; in __blk_queue_bounce()
235 bio = bounce_clone_bio(*bio_orig); in __blk_queue_bounce()
242 for (i = 0, to = bio->bi_io_vec; i < bio->bi_vcnt; to++, i++) { in __blk_queue_bounce()
260 bio->bi_flags |= (1 << BIO_BOUNCED); in __blk_queue_bounce()
263 bio->bi_end_io = bounce_end_io_read; in __blk_queue_bounce()
265 bio->bi_end_io = bounce_end_io_write; in __blk_queue_bounce()
267 bio->bi_private = *bio_orig; in __blk_queue_bounce()
268 *bio_orig = bio; in __blk_queue_bounce()