Lines Matching refs:iter
217 static int iomap_read_inline_data(const struct iomap_iter *iter, in iomap_read_inline_data() argument
220 const struct iomap *iomap = iomap_iter_srcmap(iter); in iomap_read_inline_data()
221 size_t size = i_size_read(iter->inode) - iomap->offset; in iomap_read_inline_data()
236 iomap_page_create(iter->inode, page); in iomap_read_inline_data()
246 static inline bool iomap_block_needs_zeroing(const struct iomap_iter *iter, in iomap_block_needs_zeroing() argument
249 const struct iomap *srcmap = iomap_iter_srcmap(iter); in iomap_block_needs_zeroing()
253 pos >= i_size_read(iter->inode); in iomap_block_needs_zeroing()
256 static loff_t iomap_readpage_iter(const struct iomap_iter *iter, in iomap_readpage_iter() argument
259 const struct iomap *iomap = &iter->iomap; in iomap_readpage_iter()
260 loff_t pos = iter->pos + offset; in iomap_readpage_iter()
261 loff_t length = iomap_length(iter) - offset; in iomap_readpage_iter()
269 return iomap_read_inline_data(iter, page); in iomap_readpage_iter()
272 iop = iomap_page_create(iter->inode, page); in iomap_readpage_iter()
273 iomap_adjust_read_range(iter->inode, iop, &pos, length, &poff, &plen); in iomap_readpage_iter()
277 if (iomap_block_needs_zeroing(iter, pos)) { in iomap_readpage_iter()
329 struct iomap_iter iter = { in iomap_readpage() local
341 while ((ret = iomap_iter(&iter, ops)) > 0) in iomap_readpage()
342 iter.processed = iomap_readpage_iter(&iter, &ctx, 0); in iomap_readpage()
364 static loff_t iomap_readahead_iter(const struct iomap_iter *iter, in iomap_readahead_iter() argument
367 loff_t length = iomap_length(iter); in iomap_readahead_iter()
371 if (ctx->cur_page && offset_in_page(iter->pos + done) == 0) { in iomap_readahead_iter()
381 ret = iomap_readpage_iter(iter, ctx, done); in iomap_readahead_iter()
406 struct iomap_iter iter = { in iomap_readahead() local
417 while (iomap_iter(&iter, ops) > 0) in iomap_readahead()
418 iter.processed = iomap_readahead_iter(&iter, &ctx); in iomap_readahead()
550 static int __iomap_write_begin(const struct iomap_iter *iter, loff_t pos, in __iomap_write_begin() argument
553 const struct iomap *srcmap = iomap_iter_srcmap(iter); in __iomap_write_begin()
554 struct iomap_page *iop = iomap_page_create(iter->inode, page); in __iomap_write_begin()
555 loff_t block_size = i_blocksize(iter->inode); in __iomap_write_begin()
565 iomap_adjust_read_range(iter->inode, iop, &block_start, in __iomap_write_begin()
570 if (!(iter->flags & IOMAP_UNSHARE) && in __iomap_write_begin()
575 if (iomap_block_needs_zeroing(iter, block_start)) { in __iomap_write_begin()
576 if (WARN_ON_ONCE(iter->flags & IOMAP_UNSHARE)) in __iomap_write_begin()
591 static int iomap_write_begin_inline(const struct iomap_iter *iter, in iomap_write_begin_inline() argument
595 if (WARN_ON_ONCE(iomap_iter_srcmap(iter)->offset != 0)) in iomap_write_begin_inline()
597 return iomap_read_inline_data(iter, page); in iomap_write_begin_inline()
600 static int iomap_write_begin(const struct iomap_iter *iter, loff_t pos, in iomap_write_begin() argument
603 const struct iomap_page_ops *page_ops = iter->iomap.page_ops; in iomap_write_begin()
604 const struct iomap *srcmap = iomap_iter_srcmap(iter); in iomap_write_begin()
608 BUG_ON(pos + len > iter->iomap.offset + iter->iomap.length); in iomap_write_begin()
609 if (srcmap != &iter->iomap) in iomap_write_begin()
616 status = page_ops->page_prepare(iter->inode, pos, len); in iomap_write_begin()
621 page = grab_cache_page_write_begin(iter->inode->i_mapping, in iomap_write_begin()
629 status = iomap_write_begin_inline(iter, page); in iomap_write_begin()
633 status = __iomap_write_begin(iter, pos, len, page); in iomap_write_begin()
644 iomap_write_failed(iter->inode, pos, len); in iomap_write_begin()
648 page_ops->page_done(iter->inode, pos, 0, NULL); in iomap_write_begin()
675 static size_t iomap_write_end_inline(const struct iomap_iter *iter, in iomap_write_end_inline() argument
678 const struct iomap *iomap = &iter->iomap; in iomap_write_end_inline()
689 mark_inode_dirty(iter->inode); in iomap_write_end_inline()
694 static size_t iomap_write_end(struct iomap_iter *iter, loff_t pos, size_t len, in iomap_write_end() argument
697 const struct iomap_page_ops *page_ops = iter->iomap.page_ops; in iomap_write_end()
698 const struct iomap *srcmap = iomap_iter_srcmap(iter); in iomap_write_end()
699 loff_t old_size = iter->inode->i_size; in iomap_write_end()
703 ret = iomap_write_end_inline(iter, page, pos, copied); in iomap_write_end()
705 ret = block_write_end(NULL, iter->inode->i_mapping, pos, len, in iomap_write_end()
708 ret = __iomap_write_end(iter->inode, pos, len, copied, page); in iomap_write_end()
717 i_size_write(iter->inode, pos + ret); in iomap_write_end()
718 iter->iomap.flags |= IOMAP_F_SIZE_CHANGED; in iomap_write_end()
723 pagecache_isize_extended(iter->inode, old_size, pos); in iomap_write_end()
725 page_ops->page_done(iter->inode, pos, ret, page); in iomap_write_end()
729 iomap_write_failed(iter->inode, pos, len); in iomap_write_end()
733 static loff_t iomap_write_iter(struct iomap_iter *iter, struct iov_iter *i) in iomap_write_iter() argument
735 loff_t length = iomap_length(iter); in iomap_write_iter()
736 loff_t pos = iter->pos; in iomap_write_iter()
764 status = iomap_write_begin(iter, pos, bytes, &page); in iomap_write_iter()
768 if (mapping_writably_mapped(iter->inode->i_mapping)) in iomap_write_iter()
773 status = iomap_write_end(iter, pos, bytes, copied, page); in iomap_write_iter()
794 balance_dirty_pages_ratelimited(iter->inode->i_mapping); in iomap_write_iter()
804 struct iomap_iter iter = { in iomap_file_buffered_write() local
812 while ((ret = iomap_iter(&iter, ops)) > 0) in iomap_file_buffered_write()
813 iter.processed = iomap_write_iter(&iter, i); in iomap_file_buffered_write()
814 if (iter.pos == iocb->ki_pos) in iomap_file_buffered_write()
816 return iter.pos - iocb->ki_pos; in iomap_file_buffered_write()
820 static loff_t iomap_unshare_iter(struct iomap_iter *iter) in iomap_unshare_iter() argument
822 struct iomap *iomap = &iter->iomap; in iomap_unshare_iter()
823 const struct iomap *srcmap = iomap_iter_srcmap(iter); in iomap_unshare_iter()
824 loff_t pos = iter->pos; in iomap_unshare_iter()
825 loff_t length = iomap_length(iter); in iomap_unshare_iter()
841 status = iomap_write_begin(iter, pos, bytes, &page); in iomap_unshare_iter()
845 status = iomap_write_end(iter, pos, bytes, bytes, page); in iomap_unshare_iter()
855 balance_dirty_pages_ratelimited(iter->inode->i_mapping); in iomap_unshare_iter()
865 struct iomap_iter iter = { in iomap_file_unshare() local
873 while ((ret = iomap_iter(&iter, ops)) > 0) in iomap_file_unshare()
874 iter.processed = iomap_unshare_iter(&iter); in iomap_file_unshare()
879 static s64 __iomap_zero_iter(struct iomap_iter *iter, loff_t pos, u64 length) in __iomap_zero_iter() argument
886 status = iomap_write_begin(iter, pos, bytes, &page); in __iomap_zero_iter()
893 return iomap_write_end(iter, pos, bytes, bytes, page); in __iomap_zero_iter()
896 static loff_t iomap_zero_iter(struct iomap_iter *iter, bool *did_zero) in iomap_zero_iter() argument
898 struct iomap *iomap = &iter->iomap; in iomap_zero_iter()
899 const struct iomap *srcmap = iomap_iter_srcmap(iter); in iomap_zero_iter()
900 loff_t pos = iter->pos; in iomap_zero_iter()
901 loff_t length = iomap_length(iter); in iomap_zero_iter()
911 if (IS_DAX(iter->inode)) in iomap_zero_iter()
914 bytes = __iomap_zero_iter(iter, pos, length); in iomap_zero_iter()
932 struct iomap_iter iter = { in iomap_zero_range() local
940 while ((ret = iomap_iter(&iter, ops)) > 0) in iomap_zero_range()
941 iter.processed = iomap_zero_iter(&iter, did_zero); in iomap_zero_range()
960 static loff_t iomap_page_mkwrite_iter(struct iomap_iter *iter, in iomap_page_mkwrite_iter() argument
963 loff_t length = iomap_length(iter); in iomap_page_mkwrite_iter()
966 if (iter->iomap.flags & IOMAP_F_BUFFER_HEAD) { in iomap_page_mkwrite_iter()
967 ret = __block_write_begin_int(page, iter->pos, length, NULL, in iomap_page_mkwrite_iter()
968 &iter->iomap); in iomap_page_mkwrite_iter()
982 struct iomap_iter iter = { in iomap_page_mkwrite() local
990 ret = page_mkwrite_check_truncate(page, iter.inode); in iomap_page_mkwrite()
993 iter.pos = page_offset(page); in iomap_page_mkwrite()
994 iter.len = ret; in iomap_page_mkwrite()
995 while ((ret = iomap_iter(&iter, ops)) > 0) in iomap_page_mkwrite()
996 iter.processed = iomap_page_mkwrite_iter(&iter, page); in iomap_page_mkwrite()