Lines Matching defs:iocb

27 static blk_opf_t dio_bio_write_op(struct kiocb *iocb)
32 if (iocb_is_dsync(iocb))
46 static ssize_t __blkdev_direct_IO_simple(struct kiocb *iocb,
49 struct block_device *bdev = I_BDEV(iocb->ki_filp->f_mapping->host);
51 loff_t pos = iocb->ki_pos;
73 bio_init(&bio, bdev, vecs, nr_pages, dio_bio_write_op(iocb));
76 bio.bi_ioprio = iocb->ki_ioprio;
86 if (iocb->ki_flags & IOCB_NOWAIT)
111 struct kiocb *iocb;
132 struct kiocb *iocb = dio->iocb;
135 WRITE_ONCE(iocb->private, NULL);
139 iocb->ki_pos += ret;
144 dio->iocb->ki_complete(iocb, ret);
162 static ssize_t __blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter,
165 struct block_device *bdev = I_BDEV(iocb->ki_filp->f_mapping->host);
170 blk_opf_t opf = is_read ? REQ_OP_READ : dio_bio_write_op(iocb);
171 loff_t pos = iocb->ki_pos;
177 if (iocb->ki_flags & IOCB_ALLOC_CACHE)
189 is_sync = is_sync_kiocb(iocb);
195 dio->iocb = iocb;
208 bio->bi_ioprio = iocb->ki_ioprio;
216 if (iocb->ki_flags & IOCB_NOWAIT) {
279 struct kiocb *iocb = dio->iocb;
282 WRITE_ONCE(iocb->private, NULL);
286 iocb->ki_pos += ret;
291 iocb->ki_complete(iocb, ret);
301 static ssize_t __blkdev_direct_IO_async(struct kiocb *iocb,
305 struct block_device *bdev = I_BDEV(iocb->ki_filp->f_mapping->host);
307 blk_opf_t opf = is_read ? REQ_OP_READ : dio_bio_write_op(iocb);
310 loff_t pos = iocb->ki_pos;
316 if (iocb->ki_flags & IOCB_ALLOC_CACHE)
322 dio->iocb = iocb;
325 bio->bi_ioprio = iocb->ki_ioprio;
353 if (iocb->ki_flags & IOCB_NOWAIT)
356 if (iocb->ki_flags & IOCB_HIPRI) {
359 WRITE_ONCE(iocb->private, bio);
366 static ssize_t blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
375 if (is_sync_kiocb(iocb))
376 return __blkdev_direct_IO_simple(iocb, iter, nr_pages);
377 return __blkdev_direct_IO_async(iocb, iter, nr_pages);
379 return __blkdev_direct_IO(iocb, iter, bio_max_segs(nr_pages));
609 blkdev_direct_write(struct kiocb *iocb, struct iov_iter *from)
614 written = kiocb_invalidate_pages(iocb, count);
621 written = blkdev_direct_IO(iocb, from);
623 kiocb_invalidate_post_direct_write(iocb, count);
624 iocb->ki_pos += written;
632 static ssize_t blkdev_buffered_write(struct kiocb *iocb, struct iov_iter *from)
634 return iomap_file_buffered_write(iocb, from, &blkdev_iomap_ops);
644 static ssize_t blkdev_write_iter(struct kiocb *iocb, struct iov_iter *from)
646 struct file *file = iocb->ki_filp;
662 if (iocb->ki_pos >= size)
665 if ((iocb->ki_flags & (IOCB_NOWAIT | IOCB_DIRECT)) == IOCB_NOWAIT)
668 size -= iocb->ki_pos;
678 if (iocb->ki_flags & IOCB_DIRECT) {
679 ret = blkdev_direct_write(iocb, from);
681 ret = direct_write_fallback(iocb, from, ret,
682 blkdev_buffered_write(iocb, from));
684 ret = blkdev_buffered_write(iocb, from);
688 ret = generic_write_sync(iocb, ret);
693 static ssize_t blkdev_read_iter(struct kiocb *iocb, struct iov_iter *to)
695 struct block_device *bdev = I_BDEV(iocb->ki_filp->f_mapping->host);
697 loff_t pos = iocb->ki_pos;
714 if (iocb->ki_flags & IOCB_DIRECT) {
715 ret = kiocb_write_and_wait(iocb, count);
718 file_accessed(iocb->ki_filp);
720 ret = blkdev_direct_IO(iocb, to);
722 iocb->ki_pos += ret;
730 ret = filemap_read(iocb, to, ret);