Lines Matching refs:iter
48 struct iov_iter *iter; member
59 static struct bio *iomap_dio_alloc_bio(const struct iomap_iter *iter, in iomap_dio_alloc_bio() argument
63 return bio_alloc_bioset(iter->iomap.bdev, nr_vecs, opf, in iomap_dio_alloc_bio()
65 return bio_alloc(iter->iomap.bdev, nr_vecs, opf, GFP_KERNEL); in iomap_dio_alloc_bio()
68 static void iomap_dio_submit_bio(const struct iomap_iter *iter, in iomap_dio_submit_bio() argument
82 dio->dops->submit_io(iter, bio, pos); in iomap_dio_submit_bio()
84 WARN_ON_ONCE(iter->iomap.flags & IOMAP_F_ANON_WRITE); in iomap_dio_submit_bio()
283 static int iomap_dio_zero(const struct iomap_iter *iter, struct iomap_dio *dio, in iomap_dio_zero() argument
297 bio = iomap_dio_alloc_bio(iter, dio, 1, REQ_OP_WRITE | REQ_SYNC | REQ_IDLE); in iomap_dio_zero()
300 bio->bi_iter.bi_sector = iomap_sector(&iter->iomap, pos); in iomap_dio_zero()
305 iomap_dio_submit_bio(iter, dio, bio, pos); in iomap_dio_zero()
326 static int iomap_dio_bio_iter(struct iomap_iter *iter, struct iomap_dio *dio) in iomap_dio_bio_iter() argument
328 const struct iomap *iomap = &iter->iomap; in iomap_dio_bio_iter()
329 struct inode *inode = iter->inode; in iomap_dio_bio_iter()
331 const loff_t length = iomap_length(iter); in iomap_dio_bio_iter()
332 loff_t pos = iter->pos; in iomap_dio_bio_iter()
341 !bdev_iter_is_aligned(iomap->bdev, dio->submit.iter)) in iomap_dio_bio_iter()
353 if (length != iter->len) in iomap_dio_bio_iter()
396 orig_count = iov_iter_count(dio->submit.iter); in iomap_dio_bio_iter()
397 iov_iter_truncate(dio->submit.iter, length); in iomap_dio_bio_iter()
399 if (!iov_iter_count(dio->submit.iter)) in iomap_dio_bio_iter()
414 ret = iomap_dio_zero(iter, dio, pos - pad, pad); in iomap_dio_bio_iter()
419 nr_pages = bio_iov_vecs_to_alloc(dio->submit.iter, BIO_MAX_VECS); in iomap_dio_bio_iter()
423 iov_iter_revert(dio->submit.iter, copied); in iomap_dio_bio_iter()
428 bio = iomap_dio_alloc_bio(iter, dio, nr_pages, bio_opf); in iomap_dio_bio_iter()
437 ret = bio_iov_iter_get_pages(bio, dio->submit.iter); in iomap_dio_bio_iter()
469 nr_pages = bio_iov_vecs_to_alloc(dio->submit.iter, in iomap_dio_bio_iter()
476 iomap_dio_submit_bio(iter, dio, bio, pos); in iomap_dio_bio_iter()
492 ret = iomap_dio_zero(iter, dio, pos, in iomap_dio_bio_iter()
497 iov_iter_reexpand(dio->submit.iter, orig_count - copied); in iomap_dio_bio_iter()
499 return iomap_iter_advance(iter, &copied); in iomap_dio_bio_iter()
503 static int iomap_dio_hole_iter(struct iomap_iter *iter, struct iomap_dio *dio) in iomap_dio_hole_iter() argument
505 loff_t length = iov_iter_zero(iomap_length(iter), dio->submit.iter); in iomap_dio_hole_iter()
510 return iomap_iter_advance(iter, &length); in iomap_dio_hole_iter()
516 struct iov_iter *iter = dio->submit.iter; in iomap_dio_inline_iter() local
530 copied = copy_from_iter(inline_data, length, iter); in iomap_dio_inline_iter()
537 copied = copy_to_iter(inline_data, length, iter); in iomap_dio_inline_iter()
545 static int iomap_dio_iter(struct iomap_iter *iter, struct iomap_dio *dio) in iomap_dio_iter() argument
547 switch (iter->iomap.type) { in iomap_dio_iter()
551 return iomap_dio_hole_iter(iter, dio); in iomap_dio_iter()
554 return iomap_dio_hole_iter(iter, dio); in iomap_dio_iter()
555 return iomap_dio_bio_iter(iter, dio); in iomap_dio_iter()
557 return iomap_dio_bio_iter(iter, dio); in iomap_dio_iter()
559 return iomap_dio_inline_iter(iter, dio); in iomap_dio_iter()
597 __iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter, in __iomap_dio_rw() argument
605 .len = iov_iter_count(iter), in __iomap_dio_rw()
615 trace_iomap_dio_rw_begin(iocb, iter, dio_flags, done_before); in __iomap_dio_rw()
633 dio->submit.iter = iter; in __iomap_dio_rw()
639 if (iov_iter_rw(iter) == READ) { in __iomap_dio_rw()
646 if (user_backed_iter(iter)) in __iomap_dio_rw()
744 if (iov_iter_rw(iter) == READ && iomi.pos >= dio->i_size) in __iomap_dio_rw()
745 iov_iter_revert(iter, iomi.pos - dio->i_size); in __iomap_dio_rw()
812 iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter, in iomap_dio_rw() argument
818 dio = __iomap_dio_rw(iocb, iter, ops, dops, dio_flags, private, in iomap_dio_rw()