Lines Matching defs:iocb
2422 static int filemap_update_page(struct kiocb *iocb,
2428 if (iocb->ki_flags & IOCB_NOWAIT) {
2437 if (iocb->ki_flags & (IOCB_NOWAIT | IOCB_NOIO))
2439 if (!(iocb->ki_flags & IOCB_WAITQ)) {
2448 error = __folio_lock_async(folio, iocb->ki_waitq);
2458 if (filemap_range_uptodate(mapping, iocb->ki_pos, count, folio,
2463 if (iocb->ki_flags & (IOCB_NOIO | IOCB_NOWAIT | IOCB_WAITQ))
2466 error = filemap_read_folio(iocb->ki_filp, mapping->a_ops->read_folio,
2523 static int filemap_readahead(struct kiocb *iocb, struct file *file,
2529 if (iocb->ki_flags & IOCB_NOIO)
2535 static int filemap_get_pages(struct kiocb *iocb, size_t count,
2538 struct file *filp = iocb->ki_filp;
2541 pgoff_t index = iocb->ki_pos >> PAGE_SHIFT;
2547 last_index = DIV_ROUND_UP(iocb->ki_pos + count, PAGE_SIZE);
2554 if (iocb->ki_flags & IOCB_NOIO)
2561 if (iocb->ki_flags & (IOCB_NOWAIT | IOCB_WAITQ))
2564 iocb->ki_pos >> PAGE_SHIFT, fbatch);
2572 err = filemap_readahead(iocb, filp, mapping, folio, last_index);
2577 if ((iocb->ki_flags & IOCB_WAITQ) &&
2579 iocb->ki_flags |= IOCB_NOWAIT;
2580 err = filemap_update_page(iocb, mapping, count, folio,
2606 * @iocb: The iocb to read.
2617 ssize_t filemap_read(struct kiocb *iocb, struct iov_iter *iter,
2620 struct file *filp = iocb->ki_filp;
2630 if (unlikely(iocb->ki_pos >= inode->i_sb->s_maxbytes))
2646 if ((iocb->ki_flags & IOCB_WAITQ) && already_read)
2647 iocb->ki_flags |= IOCB_NOWAIT;
2649 if (unlikely(iocb->ki_pos >= i_size_read(inode)))
2652 error = filemap_get_pages(iocb, iter->count, &fbatch, false);
2665 if (unlikely(iocb->ki_pos >= isize))
2667 end_offset = min_t(loff_t, isize, iocb->ki_pos + iter->count);
2688 if (!pos_same_folio(iocb->ki_pos, last_pos - 1,
2695 size_t offset = iocb->ki_pos & (fsize - 1);
2696 size_t bytes = min_t(loff_t, end_offset - iocb->ki_pos,
2715 iocb->ki_pos += copied;
2716 last_pos = iocb->ki_pos;
2727 } while (iov_iter_count(iter) && iocb->ki_pos < isize && !error);
2735 int kiocb_write_and_wait(struct kiocb *iocb, size_t count)
2737 struct address_space *mapping = iocb->ki_filp->f_mapping;
2738 loff_t pos = iocb->ki_pos;
2741 if (iocb->ki_flags & IOCB_NOWAIT) {
2750 int kiocb_invalidate_pages(struct kiocb *iocb, size_t count)
2752 struct address_space *mapping = iocb->ki_filp->f_mapping;
2753 loff_t pos = iocb->ki_pos;
2757 if (iocb->ki_flags & IOCB_NOWAIT) {
2779 * @iocb: kernel I/O control block
2785 * The IOCB_NOWAIT flag in iocb->ki_flags indicates that -EAGAIN shall
2789 * The IOCB_NOIO flag in iocb->ki_flags indicates that no new I/O
2799 generic_file_read_iter(struct kiocb *iocb, struct iov_iter *iter)
2807 if (iocb->ki_flags & IOCB_DIRECT) {
2808 struct file *file = iocb->ki_filp;
2812 retval = kiocb_write_and_wait(iocb, count);
2817 retval = mapping->a_ops->direct_IO(iocb, iter);
2819 iocb->ki_pos += retval;
2836 if (iocb->ki_pos >= i_size_read(inode))
2840 return filemap_read(iocb, iter, retval);
2902 struct kiocb iocb;
2911 init_sync_kiocb(&iocb, in);
2912 iocb.ki_pos = *ppos;
2927 iocb.ki_pos = *ppos;
2928 error = filemap_get_pages(&iocb, len, &fbatch, true);
3874 void kiocb_invalidate_post_direct_write(struct kiocb *iocb, size_t count)
3876 struct address_space *mapping = iocb->ki_filp->f_mapping;
3880 iocb->ki_pos >> PAGE_SHIFT,
3881 (iocb->ki_pos + count - 1) >> PAGE_SHIFT))
3882 dio_warn_stale_pagecache(iocb->ki_filp);
3886 generic_file_direct_write(struct kiocb *iocb, struct iov_iter *from)
3888 struct address_space *mapping = iocb->ki_filp->f_mapping;
3896 written = kiocb_invalidate_pages(iocb, write_len);
3903 written = mapping->a_ops->direct_IO(iocb, from);
3924 loff_t pos = iocb->ki_pos;
3926 kiocb_invalidate_post_direct_write(iocb, written);
3933 iocb->ki_pos = pos;
3941 ssize_t generic_perform_write(struct kiocb *iocb, struct iov_iter *i)
3943 struct file *file = iocb->ki_filp;
3944 loff_t pos = iocb->ki_pos;
4017 iocb->ki_pos += written;
4024 * @iocb: IO state structure (file, offset, etc.)
4043 ssize_t __generic_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
4045 struct file *file = iocb->ki_filp;
4058 if (iocb->ki_flags & IOCB_DIRECT) {
4059 ret = generic_file_direct_write(iocb, from);
4069 return direct_write_fallback(iocb, from, ret,
4070 generic_perform_write(iocb, from));
4073 return generic_perform_write(iocb, from);
4079 * @iocb: IO state structure
4090 ssize_t generic_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
4092 struct file *file = iocb->ki_filp;
4097 ret = generic_write_checks(iocb, from);
4099 ret = __generic_file_write_iter(iocb, from);
4103 ret = generic_write_sync(iocb, ret);