Lines Matching refs:bio

47 static void blkdev_bio_end_io_simple(struct bio *bio)  in blkdev_bio_end_io_simple()  argument
49 struct task_struct *waiter = bio->bi_private; in blkdev_bio_end_io_simple()
51 WRITE_ONCE(bio->bi_private, NULL); in blkdev_bio_end_io_simple()
62 struct bio bio; in __blkdev_direct_IO_simple() local
78 bio_init(&bio, vecs, nr_pages); in __blkdev_direct_IO_simple()
79 bio_set_dev(&bio, bdev); in __blkdev_direct_IO_simple()
80 bio.bi_iter.bi_sector = pos >> SECTOR_SHIFT; in __blkdev_direct_IO_simple()
81 bio.bi_write_hint = iocb->ki_hint; in __blkdev_direct_IO_simple()
82 bio.bi_private = current; in __blkdev_direct_IO_simple()
83 bio.bi_end_io = blkdev_bio_end_io_simple; in __blkdev_direct_IO_simple()
84 bio.bi_ioprio = iocb->ki_ioprio; in __blkdev_direct_IO_simple()
86 ret = bio_iov_iter_get_pages(&bio, iter); in __blkdev_direct_IO_simple()
89 ret = bio.bi_iter.bi_size; in __blkdev_direct_IO_simple()
92 bio.bi_opf = REQ_OP_READ; in __blkdev_direct_IO_simple()
96 bio.bi_opf = dio_bio_write_op(iocb); in __blkdev_direct_IO_simple()
100 bio.bi_opf |= REQ_NOWAIT; in __blkdev_direct_IO_simple()
102 bio_set_polled(&bio, iocb); in __blkdev_direct_IO_simple()
104 submit_bio(&bio); in __blkdev_direct_IO_simple()
107 if (!READ_ONCE(bio.bi_private)) in __blkdev_direct_IO_simple()
109 if (!(iocb->ki_flags & IOCB_HIPRI) || !bio_poll(&bio, NULL, 0)) in __blkdev_direct_IO_simple()
114 bio_release_pages(&bio, should_dirty); in __blkdev_direct_IO_simple()
115 if (unlikely(bio.bi_status)) in __blkdev_direct_IO_simple()
116 ret = blk_status_to_errno(bio.bi_status); in __blkdev_direct_IO_simple()
122 bio_uninit(&bio); in __blkdev_direct_IO_simple()
140 struct bio bio ____cacheline_aligned_in_smp;
145 static void blkdev_bio_end_io(struct bio *bio) in blkdev_bio_end_io() argument
147 struct blkdev_dio *dio = bio->bi_private; in blkdev_bio_end_io()
150 if (bio->bi_status && !dio->bio.bi_status) in blkdev_bio_end_io()
151 dio->bio.bi_status = bio->bi_status; in blkdev_bio_end_io()
160 if (likely(!dio->bio.bi_status)) { in blkdev_bio_end_io()
164 ret = blk_status_to_errno(dio->bio.bi_status); in blkdev_bio_end_io()
168 bio_put(&dio->bio); in blkdev_bio_end_io()
178 bio_check_pages_dirty(bio); in blkdev_bio_end_io()
180 bio_release_pages(bio, false); in blkdev_bio_end_io()
181 bio_put(bio); in blkdev_bio_end_io()
191 struct bio *bio; in __blkdev_direct_IO() local
200 bio = bio_alloc_kiocb(iocb, nr_pages, &blkdev_dio_pool); in __blkdev_direct_IO()
202 dio = container_of(bio, struct blkdev_dio, bio); in __blkdev_direct_IO()
208 bio_get(bio); in __blkdev_direct_IO()
226 bio_set_dev(bio, bdev); in __blkdev_direct_IO()
227 bio->bi_iter.bi_sector = pos >> SECTOR_SHIFT; in __blkdev_direct_IO()
228 bio->bi_write_hint = iocb->ki_hint; in __blkdev_direct_IO()
229 bio->bi_private = dio; in __blkdev_direct_IO()
230 bio->bi_end_io = blkdev_bio_end_io; in __blkdev_direct_IO()
231 bio->bi_ioprio = iocb->ki_ioprio; in __blkdev_direct_IO()
233 ret = bio_iov_iter_get_pages(bio, iter); in __blkdev_direct_IO()
235 bio->bi_status = BLK_STS_IOERR; in __blkdev_direct_IO()
236 bio_endio(bio); in __blkdev_direct_IO()
241 bio->bi_opf = REQ_OP_READ; in __blkdev_direct_IO()
243 bio_set_pages_dirty(bio); in __blkdev_direct_IO()
245 bio->bi_opf = dio_bio_write_op(iocb); in __blkdev_direct_IO()
246 task_io_account_write(bio->bi_iter.bi_size); in __blkdev_direct_IO()
249 bio->bi_opf |= REQ_NOWAIT; in __blkdev_direct_IO()
251 dio->size += bio->bi_iter.bi_size; in __blkdev_direct_IO()
252 pos += bio->bi_iter.bi_size; in __blkdev_direct_IO()
256 submit_bio(bio); in __blkdev_direct_IO()
260 submit_bio(bio); in __blkdev_direct_IO()
261 bio = bio_alloc(GFP_KERNEL, nr_pages); in __blkdev_direct_IO()
278 ret = blk_status_to_errno(dio->bio.bi_status); in __blkdev_direct_IO()
282 bio_put(&dio->bio); in __blkdev_direct_IO()
286 static void blkdev_bio_end_io_async(struct bio *bio) in blkdev_bio_end_io_async() argument
288 struct blkdev_dio *dio = container_of(bio, struct blkdev_dio, bio); in blkdev_bio_end_io_async()
292 if (likely(!bio->bi_status)) { in blkdev_bio_end_io_async()
296 ret = blk_status_to_errno(bio->bi_status); in blkdev_bio_end_io_async()
302 bio_check_pages_dirty(bio); in blkdev_bio_end_io_async()
304 bio_release_pages(bio, false); in blkdev_bio_end_io_async()
305 bio_put(bio); in blkdev_bio_end_io_async()
315 struct bio *bio; in __blkdev_direct_IO_async() local
323 bio = bio_alloc_kiocb(iocb, nr_pages, &blkdev_dio_pool); in __blkdev_direct_IO_async()
324 dio = container_of(bio, struct blkdev_dio, bio); in __blkdev_direct_IO_async()
327 bio_set_dev(bio, bdev); in __blkdev_direct_IO_async()
328 bio->bi_iter.bi_sector = pos >> SECTOR_SHIFT; in __blkdev_direct_IO_async()
329 bio->bi_write_hint = iocb->ki_hint; in __blkdev_direct_IO_async()
330 bio->bi_end_io = blkdev_bio_end_io_async; in __blkdev_direct_IO_async()
331 bio->bi_ioprio = iocb->ki_ioprio; in __blkdev_direct_IO_async()
340 bio_iov_bvec_set(bio, iter); in __blkdev_direct_IO_async()
342 ret = bio_iov_iter_get_pages(bio, iter); in __blkdev_direct_IO_async()
344 bio_put(bio); in __blkdev_direct_IO_async()
348 dio->size = bio->bi_iter.bi_size; in __blkdev_direct_IO_async()
351 bio->bi_opf = REQ_OP_READ; in __blkdev_direct_IO_async()
354 bio_set_pages_dirty(bio); in __blkdev_direct_IO_async()
357 bio->bi_opf = dio_bio_write_op(iocb); in __blkdev_direct_IO_async()
358 task_io_account_write(bio->bi_iter.bi_size); in __blkdev_direct_IO_async()
362 bio->bi_opf |= REQ_POLLED | REQ_NOWAIT; in __blkdev_direct_IO_async()
363 submit_bio(bio); in __blkdev_direct_IO_async()
364 WRITE_ONCE(iocb->private, bio); in __blkdev_direct_IO_async()
367 bio->bi_opf |= REQ_NOWAIT; in __blkdev_direct_IO_async()
368 submit_bio(bio); in __blkdev_direct_IO_async()
678 offsetof(struct blkdev_dio, bio), in blkdev_init()