Lines Matching refs:dio
132 struct blkdev_dio *dio = bio->bi_private; in blkdev_bio_end_io() local
133 bool should_dirty = dio->flags & DIO_SHOULD_DIRTY; in blkdev_bio_end_io()
135 if (bio->bi_status && !dio->bio.bi_status) in blkdev_bio_end_io()
136 dio->bio.bi_status = bio->bi_status; in blkdev_bio_end_io()
138 if (atomic_dec_and_test(&dio->ref)) { in blkdev_bio_end_io()
139 if (!(dio->flags & DIO_IS_SYNC)) { in blkdev_bio_end_io()
140 struct kiocb *iocb = dio->iocb; in blkdev_bio_end_io()
145 if (likely(!dio->bio.bi_status)) { in blkdev_bio_end_io()
146 ret = dio->size; in blkdev_bio_end_io()
149 ret = blk_status_to_errno(dio->bio.bi_status); in blkdev_bio_end_io()
152 dio->iocb->ki_complete(iocb, ret); in blkdev_bio_end_io()
153 bio_put(&dio->bio); in blkdev_bio_end_io()
155 struct task_struct *waiter = dio->waiter; in blkdev_bio_end_io()
157 WRITE_ONCE(dio->waiter, NULL); in blkdev_bio_end_io()
175 struct blkdev_dio *dio; in __blkdev_direct_IO() local
189 dio = container_of(bio, struct blkdev_dio, bio); in __blkdev_direct_IO()
190 atomic_set(&dio->ref, 1); in __blkdev_direct_IO()
199 dio->flags = DIO_IS_SYNC; in __blkdev_direct_IO()
200 dio->waiter = current; in __blkdev_direct_IO()
202 dio->flags = 0; in __blkdev_direct_IO()
203 dio->iocb = iocb; in __blkdev_direct_IO()
206 dio->size = 0; in __blkdev_direct_IO()
208 dio->flags |= DIO_SHOULD_DIRTY; in __blkdev_direct_IO()
214 bio->bi_private = dio; in __blkdev_direct_IO()
244 if (dio->flags & DIO_SHOULD_DIRTY) in __blkdev_direct_IO()
249 dio->size += bio->bi_iter.bi_size; in __blkdev_direct_IO()
257 atomic_inc(&dio->ref); in __blkdev_direct_IO()
269 if (!READ_ONCE(dio->waiter)) in __blkdev_direct_IO()
276 ret = blk_status_to_errno(dio->bio.bi_status); in __blkdev_direct_IO()
278 ret = dio->size; in __blkdev_direct_IO()
280 bio_put(&dio->bio); in __blkdev_direct_IO()
286 struct blkdev_dio *dio = container_of(bio, struct blkdev_dio, bio); in blkdev_bio_end_io_async() local
287 struct kiocb *iocb = dio->iocb; in blkdev_bio_end_io_async()
293 ret = dio->size; in blkdev_bio_end_io_async()
301 if (dio->flags & DIO_SHOULD_DIRTY) { in blkdev_bio_end_io_async()
316 struct blkdev_dio *dio; in __blkdev_direct_IO_async() local
328 dio = container_of(bio, struct blkdev_dio, bio); in __blkdev_direct_IO_async()
329 dio->flags = 0; in __blkdev_direct_IO_async()
330 dio->iocb = iocb; in __blkdev_direct_IO_async()
350 dio->size = bio->bi_iter.bi_size; in __blkdev_direct_IO_async()
354 dio->flags |= DIO_SHOULD_DIRTY; in __blkdev_direct_IO_async()