Lines Matching refs:ioend
1065 iomap_finish_ioend(struct iomap_ioend *ioend, int error) in iomap_finish_ioend() argument
1067 struct inode *inode = ioend->io_inode; in iomap_finish_ioend()
1068 struct bio *bio = &ioend->io_inline_bio; in iomap_finish_ioend()
1069 struct bio *last = ioend->io_bio, *next; in iomap_finish_ioend()
1071 loff_t offset = ioend->io_offset; in iomap_finish_ioend()
1074 for (bio = &ioend->io_inline_bio; bio; bio = next) { in iomap_finish_ioend()
1103 iomap_finish_ioends(struct iomap_ioend *ioend, int error) in iomap_finish_ioends() argument
1107 list_replace_init(&ioend->io_list, &tmp); in iomap_finish_ioends()
1108 iomap_finish_ioend(ioend, error); in iomap_finish_ioends()
1111 ioend = list_first_entry(&tmp, struct iomap_ioend, io_list); in iomap_finish_ioends()
1112 list_del_init(&ioend->io_list); in iomap_finish_ioends()
1113 iomap_finish_ioend(ioend, error); in iomap_finish_ioends()
1122 iomap_ioend_can_merge(struct iomap_ioend *ioend, struct iomap_ioend *next) in iomap_ioend_can_merge() argument
1124 if (ioend->io_bio->bi_status != next->io_bio->bi_status) in iomap_ioend_can_merge()
1126 if ((ioend->io_flags & IOMAP_F_SHARED) ^ in iomap_ioend_can_merge()
1129 if ((ioend->io_type == IOMAP_UNWRITTEN) ^ in iomap_ioend_can_merge()
1132 if (ioend->io_offset + ioend->io_size != next->io_offset) in iomap_ioend_can_merge()
1138 iomap_ioend_try_merge(struct iomap_ioend *ioend, struct list_head *more_ioends, in iomap_ioend_try_merge() argument
1139 void (*merge_private)(struct iomap_ioend *ioend, in iomap_ioend_try_merge() argument
1144 INIT_LIST_HEAD(&ioend->io_list); in iomap_ioend_try_merge()
1148 if (!iomap_ioend_can_merge(ioend, next)) in iomap_ioend_try_merge()
1150 list_move_tail(&next->io_list, &ioend->io_list); in iomap_ioend_try_merge()
1151 ioend->io_size += next->io_size; in iomap_ioend_try_merge()
1153 merge_private(ioend, next); in iomap_ioend_try_merge()
1181 struct iomap_ioend *ioend = bio->bi_private; in iomap_writepage_end_bio() local
1183 iomap_finish_ioend(ioend, blk_status_to_errno(bio->bi_status)); in iomap_writepage_end_bio()
1195 iomap_submit_ioend(struct iomap_writepage_ctx *wpc, struct iomap_ioend *ioend, in iomap_submit_ioend() argument
1198 ioend->io_bio->bi_private = ioend; in iomap_submit_ioend()
1199 ioend->io_bio->bi_end_io = iomap_writepage_end_bio; in iomap_submit_ioend()
1202 error = wpc->ops->prepare_ioend(ioend, error); in iomap_submit_ioend()
1210 ioend->io_bio->bi_status = errno_to_blk_status(error); in iomap_submit_ioend()
1211 bio_endio(ioend->io_bio); in iomap_submit_ioend()
1215 submit_bio(ioend->io_bio); in iomap_submit_ioend()
1223 struct iomap_ioend *ioend; in iomap_alloc_ioend() local
1233 ioend = container_of(bio, struct iomap_ioend, io_inline_bio); in iomap_alloc_ioend()
1234 INIT_LIST_HEAD(&ioend->io_list); in iomap_alloc_ioend()
1235 ioend->io_type = wpc->iomap.type; in iomap_alloc_ioend()
1236 ioend->io_flags = wpc->iomap.flags; in iomap_alloc_ioend()
1237 ioend->io_inode = inode; in iomap_alloc_ioend()
1238 ioend->io_size = 0; in iomap_alloc_ioend()
1239 ioend->io_offset = offset; in iomap_alloc_ioend()
1240 ioend->io_private = NULL; in iomap_alloc_ioend()
1241 ioend->io_bio = bio; in iomap_alloc_ioend()
1242 return ioend; in iomap_alloc_ioend()
1274 (wpc->ioend->io_flags & IOMAP_F_SHARED)) in iomap_can_add_to_ioend()
1276 if (wpc->iomap.type != wpc->ioend->io_type) in iomap_can_add_to_ioend()
1278 if (offset != wpc->ioend->io_offset + wpc->ioend->io_size) in iomap_can_add_to_ioend()
1280 if (sector != bio_end_sector(wpc->ioend->io_bio)) in iomap_can_add_to_ioend()
1299 if (!wpc->ioend || !iomap_can_add_to_ioend(wpc, offset, sector)) { in iomap_add_to_ioend()
1300 if (wpc->ioend) in iomap_add_to_ioend()
1301 list_add(&wpc->ioend->io_list, iolist); in iomap_add_to_ioend()
1302 wpc->ioend = iomap_alloc_ioend(inode, wpc, offset, sector, wbc); in iomap_add_to_ioend()
1305 merged = __bio_try_merge_page(wpc->ioend->io_bio, page, len, poff, in iomap_add_to_ioend()
1311 if (bio_full(wpc->ioend->io_bio, len)) { in iomap_add_to_ioend()
1312 wpc->ioend->io_bio = in iomap_add_to_ioend()
1313 iomap_chain_bio(wpc->ioend->io_bio); in iomap_add_to_ioend()
1315 bio_add_page(wpc->ioend->io_bio, page, len, poff); in iomap_add_to_ioend()
1318 wpc->ioend->io_size += len; in iomap_add_to_ioend()
1344 struct iomap_ioend *ioend, *next; in iomap_writepage_map() local
1376 WARN_ON_ONCE(!wpc->ioend && !list_empty(&submit_list)); in iomap_writepage_map()
1411 list_for_each_entry_safe(ioend, next, &submit_list, io_list) { in iomap_writepage_map()
1414 list_del_init(&ioend->io_list); in iomap_writepage_map()
1415 error2 = iomap_submit_ioend(wpc, ioend, error); in iomap_writepage_map()
1546 if (!wpc->ioend) in iomap_writepage()
1548 return iomap_submit_ioend(wpc, wpc->ioend, ret); in iomap_writepage()
1561 if (!wpc->ioend) in iomap_writepages()
1563 return iomap_submit_ioend(wpc, wpc->ioend, ret); in iomap_writepages()