Lines Matching defs:iter

286  * @iter: iteration structure
289 * Copy the inline data in @iter into @folio and zero out the rest of the folio.
293 static int iomap_read_inline_data(const struct iomap_iter *iter,
296 const struct iomap *iomap = iomap_iter_srcmap(iter);
297 size_t size = i_size_read(iter->inode) - iomap->offset;
313 ifs_alloc(iter->inode, folio, iter->flags);
323 static inline bool iomap_block_needs_zeroing(const struct iomap_iter *iter,
326 const struct iomap *srcmap = iomap_iter_srcmap(iter);
330 pos >= i_size_read(iter->inode);
333 static loff_t iomap_readpage_iter(const struct iomap_iter *iter,
336 const struct iomap *iomap = &iter->iomap;
337 loff_t pos = iter->pos + offset;
338 loff_t length = iomap_length(iter) - offset;
346 return iomap_read_inline_data(iter, folio);
349 ifs = ifs_alloc(iter->inode, folio, iter->flags);
350 iomap_adjust_read_range(iter->inode, folio, &pos, length, &poff, &plen);
354 if (iomap_block_needs_zeroing(iter, pos)) {
407 struct iomap_iter iter = {
417 trace_iomap_readpage(iter.inode, 1);
419 while ((ret = iomap_iter(&iter, ops)) > 0)
420 iter.processed = iomap_readpage_iter(&iter, &ctx, 0);
442 static loff_t iomap_readahead_iter(const struct iomap_iter *iter,
445 loff_t length = iomap_length(iter);
450 offset_in_folio(ctx->cur_folio, iter->pos + done) == 0) {
459 ret = iomap_readpage_iter(iter, ctx, done);
484 struct iomap_iter iter = {
495 while (iomap_iter(&iter, ops) > 0)
496 iter.processed = iomap_readahead_iter(&iter, &ctx);
539 * @iter: iteration structure
546 struct folio *iomap_get_folio(struct iomap_iter *iter, loff_t pos, size_t len)
550 if (iter->flags & IOMAP_NOWAIT)
554 return __filemap_get_folio(iter->inode->i_mapping, pos >> PAGE_SHIFT,
555 fgp, mapping_gfp_mask(iter->inode->i_mapping));
630 static int __iomap_write_begin(const struct iomap_iter *iter, loff_t pos,
633 const struct iomap *srcmap = iomap_iter_srcmap(iter);
635 loff_t block_size = i_blocksize(iter->inode);
638 unsigned int nr_blocks = i_blocks_per_folio(iter->inode, folio);
649 if (!(iter->flags & IOMAP_UNSHARE) && pos <= folio_pos(folio) &&
653 ifs = ifs_alloc(iter->inode, folio, iter->flags);
654 if ((iter->flags & IOMAP_NOWAIT) && !ifs && nr_blocks > 1)
662 iomap_adjust_read_range(iter->inode, folio, &block_start,
667 if (!(iter->flags & IOMAP_UNSHARE) &&
672 if (iomap_block_needs_zeroing(iter, block_start)) {
673 if (WARN_ON_ONCE(iter->flags & IOMAP_UNSHARE))
679 if (iter->flags & IOMAP_NOWAIT)
693 static struct folio *__iomap_get_folio(struct iomap_iter *iter, loff_t pos,
696 const struct iomap_folio_ops *folio_ops = iter->iomap.folio_ops;
699 return folio_ops->get_folio(iter, pos, len);
701 return iomap_get_folio(iter, pos, len);
704 static void __iomap_put_folio(struct iomap_iter *iter, loff_t pos, size_t ret,
707 const struct iomap_folio_ops *folio_ops = iter->iomap.folio_ops;
710 folio_ops->put_folio(iter->inode, pos, ret, folio);
717 static int iomap_write_begin_inline(const struct iomap_iter *iter,
721 if (WARN_ON_ONCE(iomap_iter_srcmap(iter)->offset != 0))
723 return iomap_read_inline_data(iter, folio);
726 static int iomap_write_begin(struct iomap_iter *iter, loff_t pos,
729 const struct iomap_folio_ops *folio_ops = iter->iomap.folio_ops;
730 const struct iomap *srcmap = iomap_iter_srcmap(iter);
734 BUG_ON(pos + len > iter->iomap.offset + iter->iomap.length);
735 if (srcmap != &iter->iomap)
741 if (!mapping_large_folio_support(iter->inode->i_mapping))
744 folio = __iomap_get_folio(iter, pos, len);
759 bool iomap_valid = folio_ops->iomap_valid(iter->inode,
760 &iter->iomap);
762 iter->iomap.flags |= IOMAP_F_STALE;
772 status = iomap_write_begin_inline(iter, folio);
776 status = __iomap_write_begin(iter, pos, len, folio);
785 __iomap_put_folio(iter, pos, 0, folio);
786 iomap_write_failed(iter->inode, pos, len);
815 static size_t iomap_write_end_inline(const struct iomap_iter *iter,
818 const struct iomap *iomap = &iter->iomap;
829 mark_inode_dirty(iter->inode);
834 static size_t iomap_write_end(struct iomap_iter *iter, loff_t pos, size_t len,
837 const struct iomap *srcmap = iomap_iter_srcmap(iter);
838 loff_t old_size = iter->inode->i_size;
842 ret = iomap_write_end_inline(iter, folio, pos, copied);
844 ret = block_write_end(NULL, iter->inode->i_mapping, pos, len,
847 ret = __iomap_write_end(iter->inode, pos, len, copied, folio);
856 i_size_write(iter->inode, pos + ret);
857 iter->iomap.flags |= IOMAP_F_SIZE_CHANGED;
859 __iomap_put_folio(iter, pos, ret, folio);
862 pagecache_isize_extended(iter->inode, old_size, pos);
864 iomap_write_failed(iter->inode, pos + ret, len - ret);
868 static loff_t iomap_write_iter(struct iomap_iter *iter, struct iov_iter *i)
870 loff_t length = iomap_length(iter);
872 loff_t pos = iter->pos;
875 struct address_space *mapping = iter->inode->i_mapping;
876 unsigned int bdp_flags = (iter->flags & IOMAP_NOWAIT) ? BDP_ASYNC : 0;
911 status = iomap_write_begin(iter, pos, bytes, &folio);
914 if (iter->iomap.flags & IOMAP_F_STALE)
925 status = iomap_write_end(iter, pos, bytes, copied, folio);
962 struct iomap_iter iter = {
971 iter.flags |= IOMAP_NOWAIT;
973 while ((ret = iomap_iter(&iter, ops)) > 0)
974 iter.processed = iomap_write_iter(&iter, i);
976 if (unlikely(iter.pos == iocb->ki_pos))
978 ret = iter.pos - iocb->ki_pos;
979 iocb->ki_pos = iter.pos;
1264 static loff_t iomap_unshare_iter(struct iomap_iter *iter)
1266 struct iomap *iomap = &iter->iomap;
1267 const struct iomap *srcmap = iomap_iter_srcmap(iter);
1268 loff_t pos = iter->pos;
1269 loff_t length = iomap_length(iter);
1285 status = iomap_write_begin(iter, pos, bytes, &folio);
1295 bytes = iomap_write_end(iter, pos, bytes, bytes, folio);
1305 balance_dirty_pages_ratelimited(iter->inode->i_mapping);
1315 struct iomap_iter iter = {
1323 while ((ret = iomap_iter(&iter, ops)) > 0)
1324 iter.processed = iomap_unshare_iter(&iter);
1329 static loff_t iomap_zero_iter(struct iomap_iter *iter, bool *did_zero)
1331 const struct iomap *srcmap = iomap_iter_srcmap(iter);
1332 loff_t pos = iter->pos;
1333 loff_t length = iomap_length(iter);
1346 status = iomap_write_begin(iter, pos, bytes, &folio);
1349 if (iter->iomap.flags & IOMAP_F_STALE)
1359 bytes = iomap_write_end(iter, pos, bytes, bytes, folio);
1377 struct iomap_iter iter = {
1385 while ((ret = iomap_iter(&iter, ops)) > 0)
1386 iter.processed = iomap_zero_iter(&iter, did_zero);
1405 static loff_t iomap_folio_mkwrite_iter(struct iomap_iter *iter,
1408 loff_t length = iomap_length(iter);
1411 if (iter->iomap.flags & IOMAP_F_BUFFER_HEAD) {
1412 ret = __block_write_begin_int(folio, iter->pos, length, NULL,
1413 &iter->iomap);
1427 struct iomap_iter iter = {
1435 ret = folio_mkwrite_check_truncate(folio, iter.inode);
1438 iter.pos = folio_pos(folio);
1439 iter.len = ret;
1440 while ((ret = iomap_iter(&iter, ops)) > 0)
1441 iter.processed = iomap_folio_mkwrite_iter(&iter, folio);