Lines Matching refs:iocb

35 static blk_opf_t dio_bio_write_op(struct kiocb *iocb)  in dio_bio_write_op()  argument
40 if (iocb_is_dsync(iocb)) in dio_bio_write_op()
54 static ssize_t __blkdev_direct_IO_simple(struct kiocb *iocb, in __blkdev_direct_IO_simple() argument
57 struct block_device *bdev = iocb->ki_filp->private_data; in __blkdev_direct_IO_simple()
59 loff_t pos = iocb->ki_pos; in __blkdev_direct_IO_simple()
81 bio_init(&bio, bdev, vecs, nr_pages, dio_bio_write_op(iocb)); in __blkdev_direct_IO_simple()
84 bio.bi_ioprio = iocb->ki_ioprio; in __blkdev_direct_IO_simple()
94 if (iocb->ki_flags & IOCB_NOWAIT) in __blkdev_direct_IO_simple()
119 struct kiocb *iocb; member
140 struct kiocb *iocb = dio->iocb; in blkdev_bio_end_io() local
143 WRITE_ONCE(iocb->private, NULL); in blkdev_bio_end_io()
147 iocb->ki_pos += ret; in blkdev_bio_end_io()
152 dio->iocb->ki_complete(iocb, ret); in blkdev_bio_end_io()
170 static ssize_t __blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter, in __blkdev_direct_IO() argument
173 struct block_device *bdev = iocb->ki_filp->private_data; in __blkdev_direct_IO()
178 blk_opf_t opf = is_read ? REQ_OP_READ : dio_bio_write_op(iocb); in __blkdev_direct_IO()
179 loff_t pos = iocb->ki_pos; in __blkdev_direct_IO()
185 if (iocb->ki_flags & IOCB_ALLOC_CACHE) in __blkdev_direct_IO()
197 is_sync = is_sync_kiocb(iocb); in __blkdev_direct_IO()
203 dio->iocb = iocb; in __blkdev_direct_IO()
216 bio->bi_ioprio = iocb->ki_ioprio; in __blkdev_direct_IO()
224 if (iocb->ki_flags & IOCB_NOWAIT) { in __blkdev_direct_IO()
287 struct kiocb *iocb = dio->iocb; in blkdev_bio_end_io_async() local
290 WRITE_ONCE(iocb->private, NULL); in blkdev_bio_end_io_async()
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()
315 blk_opf_t opf = is_read ? REQ_OP_READ : dio_bio_write_op(iocb); in __blkdev_direct_IO_async()
318 loff_t pos = iocb->ki_pos; in __blkdev_direct_IO_async()
324 if (iocb->ki_flags & IOCB_ALLOC_CACHE) in __blkdev_direct_IO_async()
330 dio->iocb = iocb; in __blkdev_direct_IO_async()
333 bio->bi_ioprio = iocb->ki_ioprio; 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()
518 static ssize_t blkdev_write_iter(struct kiocb *iocb, struct iov_iter *from) in blkdev_write_iter() argument
520 struct block_device *bdev = iocb->ki_filp->private_data; in blkdev_write_iter()
536 if (iocb->ki_pos >= size) in blkdev_write_iter()
539 if ((iocb->ki_flags & (IOCB_NOWAIT | IOCB_DIRECT)) == IOCB_NOWAIT) in blkdev_write_iter()
542 size -= iocb->ki_pos; in blkdev_write_iter()
549 ret = __generic_file_write_iter(iocb, from); in blkdev_write_iter()
551 ret = generic_write_sync(iocb, ret); in blkdev_write_iter()
557 static ssize_t blkdev_read_iter(struct kiocb *iocb, struct iov_iter *to) in blkdev_read_iter() argument
559 struct block_device *bdev = iocb->ki_filp->private_data; in blkdev_read_iter()
561 loff_t pos = iocb->ki_pos; in blkdev_read_iter()
578 if (iocb->ki_flags & IOCB_DIRECT) { in blkdev_read_iter()
579 struct address_space *mapping = iocb->ki_filp->f_mapping; in blkdev_read_iter()
581 if (iocb->ki_flags & IOCB_NOWAIT) { in blkdev_read_iter()
594 file_accessed(iocb->ki_filp); in blkdev_read_iter()
596 ret = blkdev_direct_IO(iocb, to); in blkdev_read_iter()
598 iocb->ki_pos += ret; in blkdev_read_iter()
606 ret = filemap_read(iocb, to, ret); in blkdev_read_iter()