Lines Matching refs:iocb
28 static blk_opf_t dio_bio_write_op(struct kiocb *iocb)
33 if (iocb_is_dsync(iocb))
38 static bool blkdev_dio_invalid(struct block_device *bdev, struct kiocb *iocb,
41 return iocb->ki_pos & (bdev_logical_block_size(bdev) - 1) ||
47 static ssize_t __blkdev_direct_IO_simple(struct kiocb *iocb,
52 loff_t pos = iocb->ki_pos;
57 WARN_ON_ONCE(iocb->ki_flags & IOCB_HAS_METADATA);
72 bio_init(&bio, bdev, vecs, nr_pages, dio_bio_write_op(iocb));
75 bio.bi_write_hint = file_inode(iocb->ki_filp)->i_write_hint;
76 bio.bi_ioprio = iocb->ki_ioprio;
77 if (iocb->ki_flags & IOCB_ATOMIC)
88 if (iocb->ki_flags & IOCB_NOWAIT)
113 struct kiocb *iocb;
133 if (!is_sync && (dio->iocb->ki_flags & IOCB_HAS_METADATA))
138 struct kiocb *iocb = dio->iocb;
141 WRITE_ONCE(iocb->private, NULL);
145 iocb->ki_pos += ret;
150 dio->iocb->ki_complete(iocb, ret);
168 static ssize_t __blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter,
175 blk_opf_t opf = is_read ? REQ_OP_READ : dio_bio_write_op(iocb);
176 loff_t pos = iocb->ki_pos;
179 if (iocb->ki_flags & IOCB_ALLOC_CACHE)
191 is_sync = is_sync_kiocb(iocb);
197 dio->iocb = iocb;
208 bio->bi_write_hint = file_inode(iocb->ki_filp)->i_write_hint;
211 bio->bi_ioprio = iocb->ki_ioprio;
219 if (iocb->ki_flags & IOCB_NOWAIT) {
234 if (!is_sync && (iocb->ki_flags & IOCB_HAS_METADATA)) {
235 ret = bio_integrity_map_iter(bio, iocb->private);
290 struct kiocb *iocb = dio->iocb;
293 WRITE_ONCE(iocb->private, NULL);
297 iocb->ki_pos += ret;
302 if (iocb->ki_flags & IOCB_HAS_METADATA)
305 iocb->ki_complete(iocb, ret);
315 static ssize_t __blkdev_direct_IO_async(struct kiocb *iocb,
321 blk_opf_t opf = is_read ? REQ_OP_READ : dio_bio_write_op(iocb);
324 loff_t pos = iocb->ki_pos;
327 if (iocb->ki_flags & IOCB_ALLOC_CACHE)
333 dio->iocb = iocb;
335 bio->bi_write_hint = file_inode(iocb->ki_filp)->i_write_hint;
337 bio->bi_ioprio = iocb->ki_ioprio;
363 if (iocb->ki_flags & IOCB_HAS_METADATA) {
364 ret = bio_integrity_map_iter(bio, iocb->private);
365 WRITE_ONCE(iocb->private, NULL);
370 if (iocb->ki_flags & IOCB_ATOMIC)
373 if (iocb->ki_flags & IOCB_NOWAIT)
376 if (iocb->ki_flags & IOCB_HIPRI) {
379 WRITE_ONCE(iocb->private, bio);
390 static ssize_t blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
392 struct block_device *bdev = I_BDEV(iocb->ki_filp->f_mapping->host);
398 if (blkdev_dio_invalid(bdev, iocb, iter))
403 if (is_sync_kiocb(iocb))
404 return __blkdev_direct_IO_simple(iocb, iter, bdev,
406 return __blkdev_direct_IO_async(iocb, iter, bdev, nr_pages);
407 } else if (iocb->ki_flags & IOCB_ATOMIC) {
410 return __blkdev_direct_IO(iocb, iter, bdev, bio_max_segs(nr_pages));
665 blkdev_direct_write(struct kiocb *iocb, struct iov_iter *from)
670 written = kiocb_invalidate_pages(iocb, count);
677 written = blkdev_direct_IO(iocb, from);
679 kiocb_invalidate_post_direct_write(iocb, count);
680 iocb->ki_pos += written;
688 static ssize_t blkdev_buffered_write(struct kiocb *iocb, struct iov_iter *from)
690 return iomap_file_buffered_write(iocb, from, &blkdev_iomap_ops, NULL);
700 static ssize_t blkdev_write_iter(struct kiocb *iocb, struct iov_iter *from)
702 struct file *file = iocb->ki_filp;
705 bool atomic = iocb->ki_flags & IOCB_ATOMIC;
719 if (iocb->ki_pos >= size)
722 if ((iocb->ki_flags & (IOCB_NOWAIT | IOCB_DIRECT)) == IOCB_NOWAIT)
726 ret = generic_atomic_write_valid(iocb, from);
731 size -= iocb->ki_pos;
743 if (iocb->ki_flags & IOCB_DIRECT) {
744 ret = blkdev_direct_write(iocb, from);
746 ret = direct_write_fallback(iocb, from, ret,
747 blkdev_buffered_write(iocb, from));
749 ret = blkdev_buffered_write(iocb, from);
753 ret = generic_write_sync(iocb, ret);
758 static ssize_t blkdev_read_iter(struct kiocb *iocb, struct iov_iter *to)
760 struct block_device *bdev = I_BDEV(iocb->ki_filp->f_mapping->host);
762 loff_t pos = iocb->ki_pos;
779 if (iocb->ki_flags & IOCB_DIRECT) {
780 ret = kiocb_write_and_wait(iocb, count);
783 file_accessed(iocb->ki_filp);
785 ret = blkdev_direct_IO(iocb, to);
787 iocb->ki_pos += ret;
796 ret = filemap_read(iocb, to, ret);