Lines Matching refs:bio
54 struct bio bio; in __blkdev_direct_IO_simple() local
68 bio_init(&bio, bdev, vecs, nr_pages, REQ_OP_READ); in __blkdev_direct_IO_simple()
72 bio_init(&bio, bdev, vecs, nr_pages, dio_bio_write_op(iocb)); in __blkdev_direct_IO_simple()
74 bio.bi_iter.bi_sector = pos >> SECTOR_SHIFT; in __blkdev_direct_IO_simple()
75 bio.bi_write_hint = file_inode(iocb->ki_filp)->i_write_hint; in __blkdev_direct_IO_simple()
76 bio.bi_write_stream = iocb->ki_write_stream; in __blkdev_direct_IO_simple()
77 bio.bi_ioprio = iocb->ki_ioprio; in __blkdev_direct_IO_simple()
79 bio.bi_opf |= REQ_ATOMIC; in __blkdev_direct_IO_simple()
81 ret = bio_iov_iter_get_pages(&bio, iter); in __blkdev_direct_IO_simple()
84 ret = bio.bi_iter.bi_size; in __blkdev_direct_IO_simple()
90 bio.bi_opf |= REQ_NOWAIT; in __blkdev_direct_IO_simple()
92 submit_bio_wait(&bio); in __blkdev_direct_IO_simple()
94 bio_release_pages(&bio, should_dirty); in __blkdev_direct_IO_simple()
95 if (unlikely(bio.bi_status)) in __blkdev_direct_IO_simple()
96 ret = blk_status_to_errno(bio.bi_status); in __blkdev_direct_IO_simple()
102 bio_uninit(&bio); in __blkdev_direct_IO_simple()
120 struct bio bio ____cacheline_aligned_in_smp;
125 static void blkdev_bio_end_io(struct bio *bio) in blkdev_bio_end_io() argument
127 struct blkdev_dio *dio = bio->bi_private; in blkdev_bio_end_io()
131 if (bio->bi_status && !dio->bio.bi_status) in blkdev_bio_end_io()
132 dio->bio.bi_status = bio->bi_status; in blkdev_bio_end_io()
135 bio_integrity_unmap_user(bio); in blkdev_bio_end_io()
144 if (likely(!dio->bio.bi_status)) { in blkdev_bio_end_io()
148 ret = blk_status_to_errno(dio->bio.bi_status); in blkdev_bio_end_io()
152 bio_put(&dio->bio); in blkdev_bio_end_io()
162 bio_check_pages_dirty(bio); in blkdev_bio_end_io()
164 bio_release_pages(bio, false); in blkdev_bio_end_io()
165 bio_put(bio); in blkdev_bio_end_io()
174 struct bio *bio; in __blkdev_direct_IO() local
182 bio = bio_alloc_bioset(bdev, nr_pages, opf, GFP_KERNEL, in __blkdev_direct_IO()
184 dio = container_of(bio, struct blkdev_dio, bio); in __blkdev_direct_IO()
190 bio_get(bio); in __blkdev_direct_IO()
208 bio->bi_iter.bi_sector = pos >> SECTOR_SHIFT; in __blkdev_direct_IO()
209 bio->bi_write_hint = file_inode(iocb->ki_filp)->i_write_hint; in __blkdev_direct_IO()
210 bio->bi_write_stream = iocb->ki_write_stream; in __blkdev_direct_IO()
211 bio->bi_private = dio; in __blkdev_direct_IO()
212 bio->bi_end_io = blkdev_bio_end_io; in __blkdev_direct_IO()
213 bio->bi_ioprio = iocb->ki_ioprio; in __blkdev_direct_IO()
215 ret = bio_iov_iter_get_pages(bio, iter); in __blkdev_direct_IO()
217 bio->bi_status = BLK_STS_IOERR; in __blkdev_direct_IO()
218 bio_endio(bio); in __blkdev_direct_IO()
234 bio->bi_opf |= REQ_NOWAIT; in __blkdev_direct_IO()
237 ret = bio_integrity_map_iter(bio, iocb->private); in __blkdev_direct_IO()
244 bio_set_pages_dirty(bio); in __blkdev_direct_IO()
246 task_io_account_write(bio->bi_iter.bi_size); in __blkdev_direct_IO()
248 dio->size += bio->bi_iter.bi_size; in __blkdev_direct_IO()
249 pos += bio->bi_iter.bi_size; in __blkdev_direct_IO()
253 submit_bio(bio); in __blkdev_direct_IO()
257 submit_bio(bio); in __blkdev_direct_IO()
258 bio = bio_alloc(bdev, nr_pages, opf, GFP_KERNEL); in __blkdev_direct_IO()
275 ret = blk_status_to_errno(dio->bio.bi_status); in __blkdev_direct_IO()
279 bio_put(&dio->bio); in __blkdev_direct_IO()
282 bio_release_pages(bio, false); in __blkdev_direct_IO()
283 bio_clear_flag(bio, BIO_REFFED); in __blkdev_direct_IO()
284 bio_put(bio); in __blkdev_direct_IO()
289 static void blkdev_bio_end_io_async(struct bio *bio) in blkdev_bio_end_io_async() argument
291 struct blkdev_dio *dio = container_of(bio, struct blkdev_dio, bio); in blkdev_bio_end_io_async()
297 if (likely(!bio->bi_status)) { in blkdev_bio_end_io_async()
301 ret = blk_status_to_errno(bio->bi_status); in blkdev_bio_end_io_async()
305 bio_integrity_unmap_user(bio); in blkdev_bio_end_io_async()
310 bio_check_pages_dirty(bio); in blkdev_bio_end_io_async()
312 bio_release_pages(bio, false); in blkdev_bio_end_io_async()
313 bio_put(bio); in blkdev_bio_end_io_async()
325 struct bio *bio; in __blkdev_direct_IO_async() local
331 bio = bio_alloc_bioset(bdev, nr_pages, opf, GFP_KERNEL, in __blkdev_direct_IO_async()
333 dio = container_of(bio, struct blkdev_dio, bio); in __blkdev_direct_IO_async()
336 bio->bi_iter.bi_sector = pos >> SECTOR_SHIFT; in __blkdev_direct_IO_async()
337 bio->bi_write_hint = file_inode(iocb->ki_filp)->i_write_hint; in __blkdev_direct_IO_async()
338 bio->bi_write_stream = iocb->ki_write_stream; in __blkdev_direct_IO_async()
339 bio->bi_end_io = blkdev_bio_end_io_async; in __blkdev_direct_IO_async()
340 bio->bi_ioprio = iocb->ki_ioprio; in __blkdev_direct_IO_async()
349 bio_iov_bvec_set(bio, iter); in __blkdev_direct_IO_async()
351 ret = bio_iov_iter_get_pages(bio, iter); in __blkdev_direct_IO_async()
355 dio->size = bio->bi_iter.bi_size; in __blkdev_direct_IO_async()
360 bio_set_pages_dirty(bio); in __blkdev_direct_IO_async()
363 task_io_account_write(bio->bi_iter.bi_size); in __blkdev_direct_IO_async()
367 ret = bio_integrity_map_iter(bio, iocb->private); in __blkdev_direct_IO_async()
374 bio->bi_opf |= REQ_ATOMIC; in __blkdev_direct_IO_async()
377 bio->bi_opf |= REQ_NOWAIT; in __blkdev_direct_IO_async()
380 bio->bi_opf |= REQ_POLLED; in __blkdev_direct_IO_async()
381 submit_bio(bio); in __blkdev_direct_IO_async()
382 WRITE_ONCE(iocb->private, bio); in __blkdev_direct_IO_async()
384 submit_bio(bio); in __blkdev_direct_IO_async()
389 bio_put(bio); in __blkdev_direct_IO_async()
969 offsetof(struct blkdev_dio, bio), in blkdev_init()