Lines Matching refs:iocb

35 static unsigned int dio_bio_write_op(struct kiocb *iocb)  in dio_bio_write_op()  argument
40 if (iocb->ki_flags & IOCB_DSYNC) in dio_bio_write_op()
55 static ssize_t __blkdev_direct_IO_simple(struct kiocb *iocb, in __blkdev_direct_IO_simple() argument
58 struct block_device *bdev = iocb->ki_filp->private_data; in __blkdev_direct_IO_simple()
60 loff_t pos = iocb->ki_pos; in __blkdev_direct_IO_simple()
81 bio.bi_write_hint = iocb->ki_hint; in __blkdev_direct_IO_simple()
84 bio.bi_ioprio = iocb->ki_ioprio; in __blkdev_direct_IO_simple()
96 bio.bi_opf = dio_bio_write_op(iocb); in __blkdev_direct_IO_simple()
99 if (iocb->ki_flags & IOCB_NOWAIT) in __blkdev_direct_IO_simple()
101 if (iocb->ki_flags & IOCB_HIPRI) in __blkdev_direct_IO_simple()
102 bio_set_polled(&bio, iocb); in __blkdev_direct_IO_simple()
109 if (!(iocb->ki_flags & IOCB_HIPRI) || !bio_poll(&bio, NULL, 0)) in __blkdev_direct_IO_simple()
134 struct kiocb *iocb; member
155 struct kiocb *iocb = dio->iocb; in blkdev_bio_end_io() local
158 WRITE_ONCE(iocb->private, NULL); in blkdev_bio_end_io()
162 iocb->ki_pos += ret; in blkdev_bio_end_io()
167 dio->iocb->ki_complete(iocb, ret); in blkdev_bio_end_io()
185 static ssize_t __blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter, in __blkdev_direct_IO() argument
188 struct block_device *bdev = iocb->ki_filp->private_data; in __blkdev_direct_IO()
193 loff_t pos = iocb->ki_pos; in __blkdev_direct_IO()
200 bio = bio_alloc_kiocb(iocb, nr_pages, &blkdev_dio_pool); in __blkdev_direct_IO()
210 is_sync = is_sync_kiocb(iocb); in __blkdev_direct_IO()
216 dio->iocb = iocb; in __blkdev_direct_IO()
228 bio->bi_write_hint = iocb->ki_hint; in __blkdev_direct_IO()
231 bio->bi_ioprio = iocb->ki_ioprio; in __blkdev_direct_IO()
245 bio->bi_opf = dio_bio_write_op(iocb); in __blkdev_direct_IO()
248 if (iocb->ki_flags & IOCB_NOWAIT) in __blkdev_direct_IO()
289 struct kiocb *iocb = dio->iocb; in blkdev_bio_end_io_async() local
294 iocb->ki_pos += ret; in blkdev_bio_end_io_async()
299 iocb->ki_complete(iocb, ret); in blkdev_bio_end_io_async()
309 static ssize_t __blkdev_direct_IO_async(struct kiocb *iocb, in __blkdev_direct_IO_async() argument
313 struct block_device *bdev = iocb->ki_filp->private_data; in __blkdev_direct_IO_async()
316 loff_t pos = iocb->ki_pos; in __blkdev_direct_IO_async()
323 bio = bio_alloc_kiocb(iocb, nr_pages, &blkdev_dio_pool); in __blkdev_direct_IO_async()
326 dio->iocb = iocb; in __blkdev_direct_IO_async()
329 bio->bi_write_hint = iocb->ki_hint; in __blkdev_direct_IO_async()
331 bio->bi_ioprio = iocb->ki_ioprio; in __blkdev_direct_IO_async()
357 bio->bi_opf = dio_bio_write_op(iocb); in __blkdev_direct_IO_async()
361 if (iocb->ki_flags & IOCB_HIPRI) { in __blkdev_direct_IO_async()
364 WRITE_ONCE(iocb->private, bio); in __blkdev_direct_IO_async()
366 if (iocb->ki_flags & IOCB_NOWAIT) in __blkdev_direct_IO_async()
373 static ssize_t blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter) in blkdev_direct_IO() argument
382 if (is_sync_kiocb(iocb)) in blkdev_direct_IO()
383 return __blkdev_direct_IO_simple(iocb, iter, nr_pages); in blkdev_direct_IO()
384 return __blkdev_direct_IO_async(iocb, iter, nr_pages); in blkdev_direct_IO()
386 return __blkdev_direct_IO(iocb, iter, bio_max_segs(nr_pages)); in blkdev_direct_IO()
526 static ssize_t blkdev_write_iter(struct kiocb *iocb, struct iov_iter *from) in blkdev_write_iter() argument
528 struct block_device *bdev = iocb->ki_filp->private_data; in blkdev_write_iter()
544 if (iocb->ki_pos >= size) in blkdev_write_iter()
547 if ((iocb->ki_flags & (IOCB_NOWAIT | IOCB_DIRECT)) == IOCB_NOWAIT) in blkdev_write_iter()
550 size -= iocb->ki_pos; in blkdev_write_iter()
557 ret = __generic_file_write_iter(iocb, from); in blkdev_write_iter()
559 ret = generic_write_sync(iocb, ret); in blkdev_write_iter()
565 static ssize_t blkdev_read_iter(struct kiocb *iocb, struct iov_iter *to) in blkdev_read_iter() argument
567 struct block_device *bdev = iocb->ki_filp->private_data; in blkdev_read_iter()
569 loff_t pos = iocb->ki_pos; in blkdev_read_iter()
583 ret = generic_file_read_iter(iocb, to); in blkdev_read_iter()